2017-02-10 49 views
2

我在Create鑑於以下標記爲模型EmployeeBindingModelMVC 6 ASP驗證,總結省略屬性名驗證上隱藏輸入

<div asp-validation-summary="All" class="text-danger"></div> 
<input type="hidden" asp-for="EmployeeId" /> 

如果我離開愚蠢的架式Create行動是,它儘管爲EmployeeBindingModel鍵入了控制器,但仍將空模型傳遞給視圖。然後在提交時,客戶端驗證根本不起作用,但這是另一個問題的主題。

這個問題是爲什麼控制器的模型驗證只返回下面的消息,沒有一個屬性名稱,EmployeeId

The value '' is invalid. 
+0

爲什麼在該代碼的SO渲染中,'The'被稱爲藍色? – ProfK

+0

默認情況下,客戶端驗證不適用於隱藏字段。 JQuery默認設置爲ignore:「:hidden」。 –

+0

@MaxMokrousov爲什麼不嘗試做出一個答案,也許建議如何改變的問題「忽略隱藏」默認?我會很樂意接受它。 – ProfK

回答

1

客戶端jQuery驗證已默認值ignore hidden fields.

忽略(默認: 「:隱藏」 )類型:選擇器。驗證時忽略的元素,只是將其過濾掉。 jQuery的not-method被使用,因此not()所接受的所有東西都可以作爲這個選項傳遞。類型提交和重置的輸入始終被忽略,因此被禁用的元素

要修復它,您可以覆蓋。

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
     <script type="text/javascript"> 
     $.validator.setDefaults({ 
      ignore: "" 
     }); 
     </script> 
} 
+0

謝謝,這可能會非常有用。儘管如此,您的代碼將忽略除submit和reset兩個元素之外的所有元素。雖然忽略值是一個選擇器,所以我可以使用類來更具選擇性。 – ProfK

0

我相信你需要爲它提供由控制器來拿起一個名字。

<input type="hidden" name="EmployeeId" asp-for="EmployeeId" /> 

如果你想使用剃鬚刀,你可以使用以下命令:

@Html.HiddenFor(model => model.EmployeeId) 
+0

我用剃刀,現代版,即MVC 6,ASP.NET核心,其中''意味着完全相同'@ Html.HiddenFor(模型=> model.EmployeeId)'。 – ProfK

+1

啊,我明白了,道歉。不知道這一點。 –

+0

與時俱進,克里斯。 :-) MVC Core的寶石使得MVC 5看起來像一團糞便。它都是免費且開源的,即使所需的IDE都是免費的。 – ProfK