在我的视图中,我有一些有条件渲染的字段。这些字段是可以为空的布尔值,所以我使用'EditorFor()'和布尔的自定义编辑器模板(如果这很重要)
<div class="form-group">
@Html.LabelFor(m => m.HasAccount, new { @class = "col-sm-3 control-label" })
<div class="col-sm-9">
@Html.EditorFor(m => m.HasAccount)
</div>
</div>
<hr class="dotted" />
@if (Model.HasAccount2)
{
<div class="form-group">
@Html.LabelFor(m => m.ExtraField, new { @class = "col-sm-3 control-label" })
<div class="col-sm-9">
@Html.EditorFor(m => m.ExtraField)
</div>
</div>
<hr class="dotted" />
}
@Html.HiddenFor(m => m.ExtraField)
<div class="form-group">
@Html.LabelFor(m => m.Options, new { @class = "col-sm-3 control-label" })
<div class="col-sm-9">
<div class="input-group">
@Html.DropDownListFor(m => m.OptionID, Model.OptionsSelectList, "Choose an Option", new { @class = "form-control chosen-select" })
</div>
</div>
</div>
$('#Options').change(function () {
$.ajax({
url: '@Url.Action("ProcessOptions", "Home")',
type: "POST",
data: $('#ProcessForm').serialize(),
error: function (xhr, ajaxOptions, thrownError) {
alert("error");
},
success: function (result) {
$('#divContainer').html(result.ViewString);
}
});
});
现在发布视图时,根据控制器中的某些条件,我将ExtraField
的值设置为true或false。除非ExtraField
的值为true,否则不会呈现HasAccount2
的控件,以便存储我使用HiddenFor()
ExtraField
的值,以便在再次发布表单时然后ExtraField
作为true传递,而不是null,因为它没有渲染。
现在HiddenFor()
没有从模型返回的任何值。如何将ExtraField
的值存储为此方案中隐藏的内容?
修改 视图上有一个下拉列表。当更改下拉列表的选择索引时,使用JQuery Ajax发布视图。模型传递给控制器并进行处理,部分视图返回模型为Json。以下是控制器方法,
[HttpPost]
public ActionResult ProcessOptions(MyOptions model)
{
if (model.OptionID == 1)
{
model.HasAccount2= true;
}
else if (model.OptionID == 3)
{
model.ExtraField = true;
}
return Json(this.RenderPartialViewToString("_Options", model););
}
方法RenderPartialViewToString只是将PartialView转换为字符串。除ExtraField外,一切正常。现在您可以看到基于某些条件我在HasAccount2设置为true时渲染ExtraField,以便User可以自己选择true或false,但是当OptionID为3时,我不希望渲染ExtraField复选框而不是我想要从控制器显式设置它并将其存储在HiddenField中,以便当用户提交表单进行保存时,也会传递ExtraField值。