HiddenField不适用于有条件呈现的控件

时间:2015-07-18 09:51:21

标签: c# asp.net-mvc

在我的视图中,我有一些有条件渲染的字段。这些字段是可以为空的布尔值,所以我使用'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值。

0 个答案:

没有答案