隐藏字段不将局部视图中的值存储到复杂对象的数组中



我无法在模型中获取复杂类型的数组来存储其在控制器中两个操作之间的值IsAssigned。

一旦模型已经组成,包括复杂类型的数组(包括IsAssigned(,视图引擎就开始呈现HTML/Razor脚本。在视图中,有一部分脚本处理操纵复杂类型的控件的显示。它是一个"For i"循环,循环通过复杂类型的数组。

在这个循环中,对于包含在复杂类型数组中的属性IsAssigned,有一个剃刀命令HiddeFor。

在渲染局部视图的循环中执行第二个步骤。在这个视图中,有两个单选按钮链接到数组位置的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])
}

PartialView

<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不知道如何将它们绑定回数组。尝试将正确的前缀显式传递给分部:

@Html.Partial(
"_KitTypeDispensing", 
Model.KitTypeAssignment[i], 
new ViewDataDictionary { TemplateInfo = new TemplateInfo { 
HtmlFieldPrefix = Html.NameFor(m => m.KitTypeAssignment[i]).ToString() } 
}
)

进一步阅读:ASP.NET MVC部分视图与部分模型

最新更新