gpt4 book ai didi

c# - MVC4 部分绑定(bind)模型到 ICollection 或 List

转载 作者:行者123 更新时间:2023-11-30 12:11:46 25 4
gpt4 key购买 nike

给定一个模型

public class Task
{
public int TaskId { get; set; }
public string Title { get; set; }
public ICollection<SomeData> Information { get; set; }
}

在哪里

public class SomeData
{
public int SomeDataId { get; set; }
public string Description { get; set; }
}

我有意见

@model myProject.Models.Task

<div>
@Html.LabelFor(model => model.Title)
</div>

<table>
@Html.Partial("_InformationEdit", Model.Information.ToList(), new ViewDataDictionary(Html.ViewDataContainer.ViewData) {
TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "Information" }})
</table>

我的部分是

@model IList<myProject.Models.SomeData>

@for (int i = 0; i < Model.Count(); i++)
{
<tr>
<td>
@Html.EditorFor(modelItem => Model[i].Description)
</td>
</tr>
}

但是

我的 Html 字段被呈现为

<input class="text-box single-line" id="Information__0__Description" name="Information.[0].Description" type="text">

名称应为 Information[0].Description。它在那里有一个额外的点,因此在发布时没有正确绑定(bind)回模型。我该如何解决这个问题?

根据 Model binding to a list 我可以看到我的 ID 应该是什么,但我就是想不出正确的语法。

此外,是否有更优雅的方法通过使用 @foreachIEnumerable 实现此目的?

相关:

ASP.Net MVC4 bind a "create view" to a model that contains List

ASP.NET MVC model binding an IList<> parameter

最佳答案

您可以使用 <input...直接这样:

页面:

<table>
@Html.Partial("_InformationEdit", Model.Information)
</table>

部分页面:

@for (int i = 0; i < Model.Count(); i++)
{
<tr>
<td>
<input class="text-box single-line" id="Information[@i]Description" name="Information[@i].Description" type="text" value="@Model[i].Description" />
</td>
</tr>
}

或者,为了能够像您的示例中那样传递前缀,您可以保持页面代码相同并更改您的部分代码,例如:

页面:

<table>        
@Html.Partial("_InformationEdit", Model.Information,
new ViewDataDictionary(Html.ViewDataContainer.ViewData)
{
TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "Information" }
})
</table>

部分页面:

@for (int i = 0; i < Model.Count(); i++)
{
<tr>
<td>
@{
string fieldName = string.Format("{0}[{1}].Description", ViewData.TemplateInfo.HtmlFieldPrefix, i);
<input class="text-box single-line" id="@fieldName" name="@fieldName" type="text" value="@Model[i].Description" />
}
</td>
</tr>
}

关于c# - MVC4 部分绑定(bind)模型到 ICollection 或 List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14750946/

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