C# 将模型属性传递给Html.ActionLink

C# 将模型属性传递给Html.ActionLink,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,编辑:我找到了答案,但这意味着放弃使用HtmlActionlink而支持这样做(我原来帖子中的“废话”参数现在被转为我实际需要的参数): 结果:值不能为null或空。 参数名称:linkText 试着这样做: @Html.ActionLink(Model.LastName ..... @Html.ActionLink(item.LastName, "blah", "blah") @Html.ActionLink(@Html.DisplayFor(modelItem => item.L

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

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

试着这样做:

@Html.ActionLink(Model.LastName  .....
@Html.ActionLink(item.LastName, "blah", "blah")
@Html.ActionLink(@Html.DisplayFor(modelItem => item.LastName), "blah", "blah")
@Html.DisplayFor(Model.LastName, "actionMethod","controllerName",new{Model.LastName});
@Html.ActionLink(Model.LastName, "ActionName","ControllerName")
@model MyCompany.LGCustData
结果: System.Collections.Generic.IEnumerable'不包含'LastName'的定义,并且找不到接受'System.Collections.Generic.IEnumerable'类型的第一个参数的扩展方法'LastName'(是否缺少using指令或程序集引用?)

等等。不管怎样,这些错误总是其中之一

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


尽管进行了大量的搜索,但我似乎不知道如何做似乎应该是基本的事情

这很好:

@Html.DisplayFor(modelItem => item.LastName)
但我想在Html.ActionLink中将LastName字段显示为链接文本,如下所示:

@Html.ActionLink(Model.LastName  .....
@Html.ActionLink(item.LastName, "blah", "blah")
@Html.ActionLink(@Html.DisplayFor(modelItem => item.LastName), "blah", "blah")
@Html.DisplayFor(Model.LastName, "actionMethod","controllerName",new{Model.LastName});
@Html.ActionLink(Model.LastName, "ActionName","ControllerName")
@model MyCompany.LGCustData
但什么都不管用。按上述方式操作会导致编译错误:

方法的类型参数 'System.Web.Mvc.Html.DisplayExtensions.DisplayFor(System.Web.Mvc.HtmlHelper, System.Linq.Expressions.Expression>)' 无法从用法推断。尝试指定类型参数 明确地

我试过这样做:

@Html.ActionLink(Model.LastName  .....
@Html.ActionLink(item.LastName, "blah", "blah")
@Html.ActionLink(@Html.DisplayFor(modelItem => item.LastName), "blah", "blah")
@Html.DisplayFor(Model.LastName, "actionMethod","controllerName",new{Model.LastName});
@Html.ActionLink(Model.LastName, "ActionName","ControllerName")
@model MyCompany.LGCustData
以及其嵌套的其他变体。这也不起作用(不会编译),错误为“actionlink没有重载方法…”


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

这是一个关于如何使用actionlink的简短描述

Html.ActionLink("link title", 
                "ActionMethod",  
                 "ControllerName",  
                    null, // <-- Route arguments.
                    null  // <-- htmlArguments
)
*如果在这种情况下,您希望按照标准约定向管线添加一些参数:

/controller/action/parameter
否则

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

这是关于如何使用actionlink的简短描述

Html.ActionLink("link title", 
                "ActionMethod",  
                 "ControllerName",  
                    null, // <-- Route arguments.
                    null  // <-- htmlArguments
)
*如果在这种情况下,您希望按照标准约定向管线添加一些参数:

/controller/action/parameter
否则

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

您需要使用超负荷的
Html.ActionLink

@Html.ActionLink(string LinkText,string ActionName,string ControllerName)
这样做:

@Html.ActionLink(Model.LastName  .....
@Html.ActionLink(item.LastName, "blah", "blah")
@Html.ActionLink(@Html.DisplayFor(modelItem => item.LastName), "blah", "blah")
@Html.DisplayFor(Model.LastName, "actionMethod","controllerName",new{Model.LastName});
@Html.ActionLink(Model.LastName, "ActionName","ControllerName")
@model MyCompany.LGCustData
更新:

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

@foreach(var item in Model)
{

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

}
如果模型是这样的单个:

@Html.ActionLink(Model.LastName  .....
@Html.ActionLink(item.LastName, "blah", "blah")
@Html.ActionLink(@Html.DisplayFor(modelItem => item.LastName), "blah", "blah")
@Html.DisplayFor(Model.LastName, "actionMethod","controllerName",new{Model.LastName});
@Html.ActionLink(Model.LastName, "ActionName","ControllerName")
@model MyCompany.LGCustData
那么应该是这样的:

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

您需要使用超负荷的
Html.ActionLink

@Html.ActionLink(string LinkText,string ActionName,string ControllerName)
这样做:

@Html.ActionLink(Model.LastName  .....
@Html.ActionLink(item.LastName, "blah", "blah")
@Html.ActionLink(@Html.DisplayFor(modelItem => item.LastName), "blah", "blah")
@Html.DisplayFor(Model.LastName, "actionMethod","controllerName",new{Model.LastName});
@Html.ActionLink(Model.LastName, "ActionName","ControllerName")
@model MyCompany.LGCustData
更新:

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

@foreach(var item in Model)
{

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

}
如果模型是这样的单个:

@Html.ActionLink(Model.LastName  .....
@Html.ActionLink(item.LastName, "blah", "blah")
@Html.ActionLink(@Html.DisplayFor(modelItem => item.LastName), "blah", "blah")
@Html.DisplayFor(Model.LastName, "actionMethod","controllerName",new{Model.LastName});
@Html.ActionLink(Model.LastName, "ActionName","ControllerName")
@model MyCompany.LGCustData
那么应该是这样的:

@Html.ActionLink(Model.LastName, "ActionName","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>
    @foreach(ViewBag.users中的var用户) { string complete_name=string.Format(“{0}{1}”,user.Firstname,user.Lastname);
  • @ActionLink(完整的名称,“详细信息”,新的{Id=user.Id})
  • }

在我的计算机上,它工作得非常好。

对于我来说,我只需使用
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>
    @foreach(ViewBag.users中的var用户) { string complete_name=string.Format(“{0}{1}”,user.Firstname,user.Lastname);
  • @ActionLink(完整的名称,“详细信息”,新的{Id=user.Id})
  • }
在我的电脑上,它工作得很好。

只要用它就行了

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

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

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

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

很抱歉,执行此操作时出现错误:@Html.ActionLink(item.LastName,“blah”,“blah”)实际上是值,不能为null或空。参数名称:linkText在尝试其他操作时,我遇到了另一个关于指定类型参数的错误。我忘了我在尝试什么。为什么要使用
modelItem=>item.LastName
而不是
item=>item.LastName
?您当前正在完全忽略lambda表达式参数…item=>item.Lastname在任何容量下都不起作用。即使在htmldisplayfor中,它也会抛出一个错误“名为'item'的局部变量不能在此范围内声明,因为它将赋予'item'不同的含义,而'item'已在'parent or current'范围内用于表示其他内容”,然后更改参数名称!使用
modelItem=>modelItem.LastName
。我的观点仍然站得住脚……对不起,我在执行此操作时遇到的错误:@Html.ActionLink(item.LastName,“blah”,“blah”)实际上是值,不能为null或空。参数名称:linkText在尝试其他操作时,我遇到了另一个关于指定类型参数的错误。我忘了我在尝试什么。为什么要使用
modelItem=>item.LastName
而不是
item=>item.LastName
?您当前正在完全忽略lambda表达式参数…item=>item.Lastname在任何容量下都不起作用。即使在htmldisplayfor中,它也会抛出一个错误“名为'item'的局部变量不能在此范围内声明,因为它将赋予'item'不同的含义,而'item'已在'parent or current'范围内用于表示其他内容”,然后更改参数名称!使用
modelItem=>modelItem.LastName
。我的观点仍然站得住脚……对不起,这些东西都不管用。所有人都会给我一个或另一个错误。这个:@Html.DisplayFor(Model.LastName,“actionMethod”,“controllerName”);给我错误“…不包含'LastName'的定义…”“@Html.ActionLink(item=>item.LastName,“blah”,“blah”)这也不起作用。“无法将lamda表达式转换为字符串类型”为什么将动态属性转换为链接文本如此困难?也许我会忘记它,在它旁边贴一个链接,上面写着“细节”,就像你让VS自动创建索引、创建、编辑、细节视图时得到的一样。也许VS知道一些我不知道的事情