我是MVC的新手,想要添加~/Destinations/35
之类的链接,它将引用Destinations控制器的Index视图,35是要显示的目标的ID。
ActionLink()或RouteLink()似乎都不允许我创建这样的链接。
另外,我尝试过这样的事情:
<table>
@foreach (var d in ViewBag.Results)
{
<tr>
<td>
@Html.ActionLink(
String.Format("<b>{0}</b>", @Html.Encode(d.Title)),
"Details", "Destinations")
</td>
</tr>
}
</table>
但是我在ActionLink系列上遇到以下错误,我不明白。
'System.Web.Mvc.HtmlHelper'没有名为'ActionLink'的适用方法,但似乎有一个名称的扩展方法。无法动态分派扩展方法。考虑转换动态参数或调用扩展方法而不使用扩展方法语法。
有人可以帮我创建此链接吗?
答案 0 :(得分:5)
您的代码的第一个问题是您尝试在链接文本(<b>
标记)中使用HTML,这是不可能的,因为在设计中它始终是HTML编码。
因此,假设您不想在链接中使用HTML,则可以执行此操作:
@Html.ActionLink(d.Title, "Details", "Destinations", new { id = "35" }, null)
假设你需要在锚内部使用HTML,你有几种可能性:
编写一个自定义的ActionLink助手,它不会对文本进行HTML编码(推荐),然后像这样使用:
@Html.MyBoldedActionLink(d.Title, "Details", "Destinations", new { id = "35" }, null)
有些事情:
<a href="@Url.Action("Details", "Destinations", new { id = "35" })">
<b>@d.Title</b>
</a>
因为我建议第一种方法是自定义助手的示例实现:
public static class HtmlExtensions
{
public static IHtmlString MyBoldedActionLink(
this HtmlHelper htmlHelper,
string linkText,
string actionName,
string controllerName,
object routeValues,
object htmlAttributes
)
{
var anchor = new TagBuilder("a");
anchor.InnerHtml = string.Format("<b>{0}</b>", htmlHelper.Encode(linkText));
var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
anchor.Attributes["href"] = urlHelper.Action(actionName, controllerName, routeValues);
anchor.MergeAttributes(new RouteValueDictionary(htmlAttributes));
return new HtmlString(anchor.ToString());
}
}