将模型属性传递给Html.ActionLink

时间:2014-04-23 16:25:21

标签: c# asp.net-mvc razor

编辑:我找到了答案,但这意味着放弃使用HtmlActionlink而支持这样做(我原来的帖子中的“blah”参数现在被用于实际需要的内容):

<a href="@Url.Action("LinkedDetails", 
                     new 
                         { 
                           controller = "LGDetails", 
                           findByString = item.AccounNumber
                         })">@item.LastName</a>

这正是我想要的。尝试使用HtmlActionLink完成相同的操作会导致一个错误或另一个错误,无论我尝试了什么:

@Html.ActionLink(item.LastName, 
                 "../LGDetails/LinkedDetails", 
                 new 
                    { 
                      controller = "LinkedDetails", 
                      findByString = item.AccounNumber 
                    }) 

结果:值不能为null或为空。 参数名称:linkText

尝试这样:

@Html.ActionLink(Model.LastName  .....

结果:

  
    

System.Collections.Generic.IEnumerable'不包含'LastName'的定义,并且没有扩展方法'LastName'接受类型'System.Collections.Generic.IEnumerable'的第一个参数可以找到(你错过了吗?使用指令或程序集引用?)

  

等等总是其中一个错误。

是的,我尝试了这里建议的每一件事,并在其他地方发现了相同数量的其他事情(这就是我找到了我使用的答案,它是由另一个有同样问题的人发布的。)


尽管进行了大量的搜索,但我似乎无法弄清楚如何做似乎应该是基本的事情。

这很好用:

@Html.DisplayFor(modelItem => item.LastName)

但我想将LastName字段显示为Html.ActionLink中的链接文本,如下所示:

@Html.ActionLink(item.LastName, "blah", "blah")

但没有任何作用。像上面这样做会给我一个编译错误:

  

方法的类型参数   “System.Web.Mvc.Html.DisplayExtensions.DisplayFor(System.Web.Mvc.HtmlHelper,   System.Linq.Expressions.Expression&GT)”   无法从使用中推断出来。尝试指定类型参数   明确地

我试过这样的话:

@Html.ActionLink(@Html.DisplayFor(modelItem => item.LastName), "blah", "blah")

以及嵌套的其他变体。这也不起作用(不会编译),错误“没有用于actionlink的重载方法......”

我觉得这应该很简单。是的,我是C#和MVC的新手。

5 个答案:

答案 0 :(得分:4)

您需要使用Html.ActionLink的重载:

@Html.ActionLink(string LinkText,string ActionName,string ControllerName)

这样做:

@Html.ActionLink(Model.LastName, "ActionName","ControllerName")

<强>更新

然后这样做,因为你的模型是IEnumerable:

@foreach(var item in Model)
{

@Html.ActionLink(item.LastName, "ActionName","ControllerName")

}

如果模特是这样的单身:

@model MyCompany.LGCustData

然后它应该是这样的:

@Html.ActionLink(Model.LastName, "ActionName","ControllerName")

答案 1 :(得分:2)

@Html.ActionLink(@Model.AccounNumber....)可以防止有人像我一样最终出现在这里。

答案 2 :(得分:0)

这是关于如何使用actionlink

的breaf描述
Html.ActionLink("link title", 
                "ActionMethod",  
                 "ControllerName",  
                    null, // <-- Route arguments.
                    null  // <-- htmlArguments
)

尝试这样的事情:

@Html.DisplayFor(Model.LastName, "actionMethod","controllerName",new{Model.LastName});

*如果您要根据标准惯例向路线添加一些参数:

/controller/action/parameter

,否则

@Html.DisplayFor(Model.LastName, "actionMethod","controllerName");

答案 3 :(得分:0)

对我来说,我只需转换&#34;动态文字&#34;在具有String.Format()功能的字符串之前

<ul>
@foreach (var user in ViewBag.users )
{
    string complete_name = String.Format("{0} {1}", user.Firstname, user.Lastname);
    <li>@Html.ActionLink(complete_name, "Details", new { Id = user.Id })</li>
}
</ul>

在我的电脑上,它工作得很好。

答案 4 :(得分:0)

只需使用

@Html.ActionLink(Html.DisplayNameFor(model => model.LastName).ToHtmlString(), "blah", "blah")