2015-09-01 42 views
1

編輯: 這裏是我已經證明的確切問題,請看看,只要我點擊提交按鈕它回發並失去了它的狀態,併爲你可以在示例代碼中看到我有三個頁面我張貼的形式 1)EmployeeForm,2)EmployerForm,3)ContractorForm<fieldset隱藏當頁面重新加載 - MVC 5

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> 
+0

您是否考慮過使用'ajax'發佈?它會保持你的頁面狀態。否則,您可以將變量存儲在視圖模型或甚至會話變量中。但這很醜陋。 – Stefan

+0

是你的模型的員工部分? – JamieD77

+0

是的,它是模型的一部分 –

回答

1

而不是使用@ Html.CheckBox()使用@ Html.CheckBoxFor()

<td> 
    @Html.CheckBoxFor(m => m.Employee) 
</td> 

這將保留該複選框的狀態當你在你的javascript返回模型狀態錯誤..

,只需調用$(「#僱員」),在頁面加載後更改事件..

$(document).ready(function() { 

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

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

集時視圖被呈現

<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 =假或顯示它,如果Model.Employee =真字段集顯示值。

+0

什麼是$('#Employee')。trigger(「change」);'for? –

+0

它會在每次頁面加載時觸發change事件。所以如果Employee的值等於true,這將導致'$('#emp')。show();'在路上執行 – JamieD77

+0

可能會有多個複選框,所以在這種情況下,我最終會觸發多行'trigger(「change」)' –

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(); 
    } 
});