我的 Controller Action : public ActionResult S-6ren">
gpt4 book ai didi

c# - ASP.NET MVC - 在 Html.ActionLink routeValues 中传递模型时遇到问题

转载 作者:可可西里 更新时间:2023-11-01 08:15:23 27 4
gpt4 key购买 nike

我的 View 如下所示:

<%@ Control Language="C#" 
Inherits="System.Web.Mvc.ViewUserControl<TMS.MVC.BusinessSystemsSupport.Models.SearchDataTypeModel>" %>


<table class="classQueryResultsTable">
<!-- the header -->
<tr class="headerRow">

<td>
<%= Html.ActionLink("Effective Startdate",
"SortDetails",
"DataQryUpdate",
new
{
model = Model,
sortBy = "EffectiveStartDate",
},
new { @class = "classLinkLogDetails" })%>
</td>

</tr>


</table>

我的 Controller Action :

    public ActionResult SortDetails(SearchDataTypeModel model, String sortBy)
{

模型参数为空。 sortBy 参数已填充。我可以毫无问题地将模型中的字符串属性传递给操作。不过,我想传入整个模型。

知道我做错了什么吗?

最佳答案

你不能传递复杂的对象:

new
{
model = Model,
sortBy = "EffectiveStartDate",
},

model = Model 没有意义,不能使用 GET 发送。您可能需要使用带有编辑器模板和/或隐藏字段的表单来发送所有模型属性。请记住,只能在查询字符串中发送标量值 (key1=value1&key2=value2...)。想到的另一种选择是仅发送 ID:

new
{
modelId = Model.Id,
sortBy = "EffectiveStartDate",
},

并在您的 Controller 操作中从您的数据存储中获取给定此 ID 的模型:

public ActionResult SortDetails(int modelId, String sortBy)
{
var model = repository.GetModel(modelId);
...
}

当然,只有当用户不应该在表单中编辑模型属性时,这才是正确的。取决于您的场景。

为了完整起见,让我公开另一个选项:使用 Html.Serialize来自 MVC Futures 的助手将整个模型序列化到一个隐藏字段中,该字段可以传递回 Controller 操作并在那里反序列化。

关于c# - ASP.NET MVC - 在 Html.ActionLink routeValues 中传递模型时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4197811/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com