将模型属性传递给Html.ActionLink

问题描述 投票:0回答:5

编辑:我找到了答案,但这意味着放弃使用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'的第一个参数'(你是否缺少using指令或装配参考?)

等等总是其中一个错误。

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


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

这很好用:

@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")

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

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

c# asp.net-mvc razor
5个回答
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是Single,就像这样:

@model MyCompany.LGCustData

那应该是这样的:

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

2
投票

@Html.ActionLink(@Model.AccounNumber....)工作,以防有人像我一样在这里结束。


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");

0
投票

对我来说,我只是简单地使用像这样的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>

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


0
投票

只是用

@Html.ActionLink(Html.DisplayNameFor(model => model.LastName).ToHtmlString(), "blah", "blah")
© www.soinside.com 2019 - 2024. All rights reserved.