<fieldset hides =“”when =“”page =“”re-loads =“” - =“”mvc =“”5 =“”

时间:2015-09-01 18:17:30

标签: asp.net-mvc asp.net-mvc-5

=“”

编辑: 这是我演示的确切问题,请看一下,一旦我点击提交按钮,它就会回复并丢失其状态,正如您在示例代码中看到的,我有三页我发布了形成 1)EmployeeForm,2)EmployerForm,3)ContractorForm

https://dotnetfiddle.net/wVtwgW

如何保留该复选框?

一旦我发布页面并重新加载同一页面,如果我的数据模型无效并且它在屏幕上显示错误消息但问题是,它隐藏了fieldset并且用户必须再次点击该复选框以显示fieldset

我的问题是:我怎样才能显示fieldset并在其中显示错误消息?

//我的脚本显示了字段集

<script>
    $(document).ready(function() {

        $('#Employee').change(function() {
            if (this.checked) { 
                $('#emp').show();
            }  
        });
 });
</script>

//它显示带有复选框的字段集:

<fieldset class="fieldset-auto-width">
    <legend>
        Select Employee
    </legend>
    <table width="auto">
        <tr>
            <th>
                Employee
            </th>
            <td>
                @Html.CheckBox("Employee")
            </td>
        </tr> 
    </table>
</fieldset>

//我的表单,我有所有输入文本和按钮等...

<fieldset id="emp" style="display: none" class="fieldset-auto-width">
    <legend>
        Employee Display
    </legend>

    @using (Html.BeginForm("EmployeeServer", "EmployeeForm", FormMethod.Post))
    {
        @Html.ValidationSummary(true)

        <div>..... </div>

    }

</fieldset>

2 个答案:

答案 0 :(得分:1)

只需使用JavaScript即可。从验证摘要帮助程序中查找呈现的元素,如果它存在,则可以显示您的员工表单。您可以将它添加到已执行的脚本中,如下所示:

$(document).ready(function() {

    $('#Employee').change(function() {
        if (this.checked) { 
            $('#emp').show();
        }  
    });

    //check for validation summary elements
    if($('.validation-summary-errors').length > 0){
        //and show previous entry if present
        $('#emp').show();
    }
});

答案 1 :(得分:1)

使用@ Html.CheckBoxFor()

而不是使用@ Html.CheckBox()
<td>
    @Html.CheckBoxFor(m => m.Employee)
</td>

当您返回模型状态错误时,这将保留复选框的状态..

在你的javascript中,只需在页面加载后调用$(“#Employee”)更改事件。

$(document).ready(function() {

    $('#Employee').change(function() {
        if (this.checked) { 
            $('#emp').show();
        }  
    });

    $('#Employee').trigger("change");
 });

在渲染视图时设置Fieldset显示值

<fieldset id="emp" style="@(Model.Employee ? "": "display: none")" class="fieldset-auto-width">
    <legend>
        Employee Display
    </legend>

    @using (Html.BeginForm("EmployeeServer", "EmployeeForm", FormMethod.Post))
    {
        @Html.ValidationSummary(true)

        <div>..... </div>

    }

</fieldset>

如果Model.Employee = false,这将隐藏字段集,如果Model.Employee = true,则显示它。