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

C# 隐藏字段不将部分视图中的值存储到复杂对象数组中,c#,html,asp.net-mvc,razor,C#,Html,Asp.net Mvc,Razor,我无法在模型中获得一个复杂类型的数组来存储其值,该数组在控制器中的两个操作之间分配 一旦组成了模型(包括复杂类型的数组(包括IsAssigned),视图引擎就开始呈现HTML/Razor脚本。在视图中,脚本中有一部分用于处理操纵复杂类型的控件的显示。它是一个“For i”循环,在复杂类型的数组中循环 在这个循环中,有一个razor命令HiddenFor用于属性IsAssigned,它包含在复杂类型数组中 在渲染局部视图的循环中执行第二步。在该视图中,有两个单选按钮链接到阵列位置的IsAssign

我无法在模型中获得一个复杂类型的数组来存储其值,该数组在控制器中的两个操作之间分配

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

在这个循环中,有一个razor命令HiddenFor用于属性IsAssigned,它包含在复杂类型数组中

在渲染局部视图的循环中执行第二步。在该视图中,有两个单选按钮链接到阵列位置的IsAssigned boolean?财产。如果用户选择yes,则属性将变为true,而非false

视图完全渲染且用户做出选择后,控制器中的下一个动作方法将被激活,模型将传递给它。在这里,我希望用户对IsAssigned属性的选择能够持久,但事实并非如此

下面是循环代码和局部视图代码

环路

for(int i=0;im.kittypesignment[i].IsKitTypeActiveForSubject) @Html.HiddenFor(m=>m.kittypesignment[i].KitType.Code) @Html.HiddenFor(m=>m.kittypesignment[i].KitType.Description) @Html.HiddenFor(m=>m.kittypesignment[i].KitType.KitTypeId) @Html.HiddenFor(m=>m.kittypesignment[i].IsAssigned,新的{@Name=“IsAssigned”+Model.kittypesignment[i].KitType.Code}) @Html.Partial(“_kittypeapping”,Model.kittypesignment[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>

@{
var kittypesign=String.Format(“{0}{1}”,Model.KitType.Code,“Assign”);
var identityOfAssigned=new{id=@kittypesign,@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}”,PrompText.Assign_185B7133DB22230701A857C059360CC2.ToLocalizableString(),Model.KitType.Description);
@Label(sectionTitle,new{@class=“colon”})
@RadioButton(m=>m.IsAssigned,true,@identityofasigned)
@Html.PromptFor(promptext.Yes_93CBA07454F06A4A960172BBD6E2A435)
@RadioButton(m=>m.IsAssigned,false,@IdentityOfNoAsigned)
@Html.PromptFor(PromptText.No_BAFD7322C6E97D25B6299B5D6FE8920B)
}

我认为问题在于部分视图没有正确地为其HTML输入元素的名称添加前缀,因此ModelBinder不知道如何将它们绑定回数组。尝试将正确的前缀显式传递给分部:

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

进一步阅读:

用实际代码代替图像,谢谢你花时间考虑这个问题并提供答案。现在正在调查这件事。将很快收到反馈。:)这是问题的一部分。问题的第二部分是包含隐藏字段,一旦删除,所有字段都会很好地工作。谢谢你,乔治!很高兴我能帮上忙:)
 @Html.Partial(
     "_KitTypeDispensing", 
     Model.KitTypeAssignment[i], 
     new ViewDataDictionary { TemplateInfo = new TemplateInfo { 
         HtmlFieldPrefix = Html.NameFor(m => m.KitTypeAssignment[i]).ToString() } 
     }
 )