将模型属性传递给 Html.ActionLink

本文关键字:Html ActionLink 模型 属性 | 更新日期: 2023-09-27 17:59:44

编辑:我找到了答案,但这意味着放弃使用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 
                    }) 

结果:值不能为空或空。参数名称:链接文本

像这样尝试:

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

结果:

System.Collections.Generic.IEnumerable"不包含"LastName">

的定义,并且找不到接受类型为"System.Collections.Generic.IEnumerable"的第一个参数的扩展方法"LastName"(您是否缺少使用指令或程序集引用?(

等等

等等。 无论如何,总是这些错误之一。

是的,我

尝试了这里建议的每一件事,以及在其他地方找到的相同数量的其他东西(这就是我找到我确实使用的答案的方式,它是由另一个有相同问题的人发布的(。


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

这工作正常:

@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>(' 无法从使用情况中推断。尝试指定类型参数 明确地

我试过这样的:

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

以及嵌套的其他变体。 这也不起作用(无法编译(,并出现错误"actionlink 没有重载方法..">

我觉得这应该很简单。 是的,我对 C# 和 MVC 很陌生。

将模型属性传递给 Html.ActionLink

你需要

使用这个重载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

那么它应该是 lke 这个:

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

@Html.ActionLink(@Model.AccounNumber....)可以防止有人像我一样来到这里。

这是对

如何使用操作链接的简要描述

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");
对我来说,

我只是使用这样的函数在字符串中转换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>

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

只需使用

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