我有一个 Htmlhelper 扩展方法,可以从任何List<T>
我必须添加功能以使任何给定列中的数据能够成为链接。
我创建了一个新类,其中包含建立链接所需的所有数据
public class ColumnLinkDescription
{
//controller name
public string Controller { get; set; }
//Action name
public string Action { get; set; }
//parameter
public string ID { get; set; }
}
我还添加了一个方法,如果该列具有链接描述,该方法将尝试生成链接
private static string TryGenerateLink<T>(HtmlHelper helper, T d, TableHeaderDetails h, string value)
{
if (h.Link != null)
{
var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
var url = urlHelper.Action(h.Link.Controller,
h.Link.Action,
new { id = d.GetType().GetProperty(h.Link.ID) });
value= url;
}
return value;
}
这通过以下方式与我的制表器相关联:
value= ((d.GetType().GetProperty(h.Name).GetValue(d, null)) ?? "").ToString();
td.InnerHtml = TryGenerateLink<T>(helper, d, h, value);
tr.InnerHtml += td.ToString();
我试过了,但输出是:
<td class=" ">/ActionTest/ControllerTest/Int32%20ArticleCode</td>
使用定义:
new ColumnLinkDescription{Controller = "ControllerTest", Action="ActionTest", ID="ArticleCode"}
看起来我应该使用与 urlHelper.Action 不同的方法,并且我很难获得 ArticleCode 的值并将其作为参数添加到链接中。
编辑1:
我通过 TryGenerateLink() 中的简单修改获得了参数的值
var url = urlHelper.Action(h.Link.Controller, h.Link.Action, new { id = d.GetType().GetProperty(h.Link.ID).GetValue(d,null) });
输出:
<td class=" ">/ActionTest/ControllerTest/96776</td>
所以剩下的唯一问题是正确生成超链接