[英]Hidden field not storing value from partial view into an array of complex object
我无法在模型中获取复杂类型的数组来在控制器的两个动作之间存储其值IsAssigned。
一旦组成了模型(包括复杂类型的数组(包括IsAssigned)),视图引擎就开始呈现HTML / Razor脚本。 在视图中,脚本的一部分处理处理复杂类型的控件的显示。 这是一个“ For i”循环,循环遍历复杂类型的数组。
在此循环期间,复杂属性数组内部包含一个针对IsAssigned属性的剃刀命令HiddenFor。
在呈现部分视图的循环中执行第二步。 在此视图中,有两个单选按钮链接到阵列位置的IsAssigned布尔值吗? 属性。 如果用户选择是,则属性变为true,否则为false。
在完全渲染视图并选择了用户之后,将激活控制器中的下一个动作方法,并将模型传递给该方法。 在这里,我希望用户对IsAssigned属性的选择将继续存在,但不会。 它不是。
下面是循环代码和局部视图代码。
环
@for (int i = 0; i < Model.KitTypeAssignment.Length; i++)
{
@Html.HiddenFor(m => m.KitTypeAssignment[i].IsKitTypeActiveForSubject)
@Html.HiddenFor(m => m.KitTypeAssignment[i].KitType.Code)
@Html.HiddenFor(m => m.KitTypeAssignment[i].KitType.Description)
@Html.HiddenFor(m => m.KitTypeAssignment[i].KitType.KitTypeId)
@Html.HiddenFor(m => m.KitTypeAssignment[i].IsAssigned, new { @Name = "IsAssigned" + Model.KitTypeAssignment[i].KitType.Code })
@Html.Partial("_KitTypeDispensing", Model.KitTypeAssignment[i])
}
局部视图
<div class="field inline spacer20">
@{
var kitTypeAssign = String.Format("{0}{1}", Model.KitType.Code, "Assign");
var identityOfAssigned = new { id = @kitTypeAssign, @Name = "IsAssigned" + Model.KitType.Code };
var kitTypeNoAssign = String.Format("{0}{1}", Model.KitType.Code, "NoAssign");
var identityOfNoAssigned = new { id = @kitTypeNoAssign, @Name = "IsAssigned" + Model.KitType.Code };
var sectionTitle = string.Format("{0} {1}", PromptText.Assign_185B7133DB22230701A857C059360CC2.ToLocalizableString(), Model.KitType.Description);
@Html.Label(sectionTitle, new { @class = "colon" })
@Html.RadioButtonFor(m => m.IsAssigned, true, @identityOfAssigned)
<label for=@kitTypeAssign>@Html.PromptFor(PromptText.Yes_93CBA07454F06A4A960172BBD6E2A435)</label>
@Html.RadioButtonFor(m => m.IsAssigned, false, @identityOfNoAssigned)
<label for=@kitTypeNoAssign>@Html.PromptFor(PromptText.No_BAFD7322C6E97D25B6299B5D6FE8920B)</label>
}
</div>
我认为问题在于局部视图无法正确为其HTML输入元素的名称添加前缀,因此ModelBinder不知道如何将其绑定回数组。 尝试将正确的前缀显式传递给partial:
@Html.Partial(
"_KitTypeDispensing",
Model.KitTypeAssignment[i],
new ViewDataDictionary { TemplateInfo = new TemplateInfo {
HtmlFieldPrefix = Html.NameFor(m => m.KitTypeAssignment[i]).ToString() }
}
)
进一步阅读: 具有局部模型的ASP.NET MVC局部视图
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.