我有一个看起来像这样的复杂模型:
public class ModelOne()
{
//other stuff
public ModelTwo modelTwo {get;set;}
}
public class ModelTwo()
{
//other stuff
public List<ModelThree> modelThrees {get;set;}
}
public class ModelThree()
{
public int Id {get;set;}
public string Type {get;set;}
}
主视图
@model ModelOne
@using (Html.BeginForm("blah", "blah", FormMethod.Post, new { id = "blah" }))
{
//other form fields
<div id="partial">
@{Html.RenderPartial("partialView", ModelOne.modelTwo.modelThrees);
</div>
<input id="submitForm" type="submit" value="Submit" />
}
ModelThree的部分视图
@model IList<ModelThree>
<table>
//header
@{for (int i = 0; i < Model.Count(); i++)
{
<tr>
@Html.HiddenFor(m => m[i].Id)
<td>
@(Html.Kendo().ComboBoxFor(m => m[i].Type)
.Filter("contains")
.Placeholder("Select type...")
.DataTextField("Text")
.DataValueField("Value")
.BindTo(new List<SelectListItem>() {
new SelectListItem() {
Text = "Some type", Value = "SomeType"
},
new SelectListItem() {
Text = "Other type", Value = "OtherType"
}
})
.HtmlAttributes(new { style = "width: 250px;" })
)
</td>
</tr>
}}
</table>
除了ModelThree
集合之外的所有内容都会在表单提交上提交。
ModelThree
最初应该绑定,如果我在构造函数中将对象添加到我的列表中,它们按预期呈现,但在提交表单时永远不会更新。我是否添加了项目(我从此示例中排除了添加逻辑)或通过生成的下拉列表更新现有项目。
如果正确提交,我需要做什么?生成的HTML在索引时看起来很正常,据我所知它应该弄清楚如何从那里绑定它。
注意:我也尝试过通用下拉列表而不是kendo组合列表,结果相同。
答案 0 :(得分:1)
看看是否有效:
<div id="partial">
@{Html.RenderPartial("partialView");
</div>
...
@model ModelOne
<table>
//header
@foreach (var model3 in Model.modelTwo.modelThrees)
{
<tr>
@Html.HiddenFor(m => model3.Id)
<td>
@(Html.Kendo().ComboBoxFor(m => model3.Type)
.Filter("contains")
.Placeholder("Select type...")
.DataTextField("Text")
.DataValueField("Value")
.BindTo(new List<SelectListItem>() {
new SelectListItem() {
Text = "Some type", Value = "SomeType"
},
new SelectListItem() {
Text = "Other type", Value = "OtherType"
}
})
.HtmlAttributes(new { style = "width: 250px;" })
)
</td>
</tr>
}
</table>
这对我来说就像一个模型绑定问题。由于您将第二个参数传递给RenderPartial
,因此所有父模型上下文都将丢失,并且帮助程序不会在输入元素上呈现正确的名称属性。