我试图使用类似于this ASP MVC帖子的自定义Image助手。下面是我使用的代码,它接受控制器和操作的字符串输入参数。然后,帮助程序使用UrlHelper.Action()
方法来处理这些字符串,并据称生成相对URL。
但是,正如您在下面的屏幕截图中看到的那样,呈现的URL中唯一的项目是路径数据。没有控制器或动作。 string url
的值等于简单
/?AgentId=1917513249
,Find
和Agent
作为controllerName
和actionName
字符串的值存在。
public static MvcHtmlString ImageLink(this HtmlHelper htmlHelper, string imgSrc, string alt, string actionName,
string controllerName, object routeValues, object imgAttributes, object htmlAttributes)
{
UrlHelper urlHelper = ((Controller) htmlHelper.ViewContext.Controller).Url;
var imgTag = new TagBuilder("img");
imgTag.MergeAttribute("src", imgSrc);
imgTag.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(imgAttributes), true);
string url = urlHelper.Action(actionName, controllerName, routeValues);
var imgLink = new TagBuilder("a");
imgLink.MergeAttribute("href", url);
imgLink.InnerHtml = imgTag.ToString();
imgLink.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes), true);
return MvcHtmlString.Create(imgLink.ToString());
}
修改
以下是我用来调用助手的Razor
@foreach (var a in item.AgentIds)
{
@Html.ImageLink(Url.Content("~/Content/images/ConCode.PNG"), null, "Find", "Agent", new {AgentId=a.AgentId}, new { title = "Get Con Code" }, null)
<br/>
}