2017-09-12 35 views
2

我正在用Razor,C#和.NET Framework 4.7開發ASP.NET MVC 5應用程序。有條件的不顯眼的驗證模式

我想根據模型的屬性值禁用表上的一些輸入字段。我做到了與JavaScript:

if ($('#LawId').val() === "1") { 
    $('#productsTable').attr("disabled", true); 
    $('.addLevelButton').attr("disabled", true); 
    $('.deleteLevelButton').attr("disabled", true); 
} 

這很好,但我不知道如何禁用不顯眼的驗證。剃刀的觀點是:

<td> 
    <div class="group"> 
     @Html.TextBoxFor(m => m.Products[index].Name, new { @class = "productClass" })<br /> 
     <div class="mensajeError">@Html.ValidationMessageFor(m => m.Products[index].Name)</div> 
    </div> 
</td> 
<td> 
    <div class="group"> 
     @Html.TextBoxFor(m => m.Products[index].Description, new { @class = "productClass", @style = "max-width:none" })<br /> 
     <div class="mensajeError">@Html.ValidationMessageFor(m => m.Products[index].Description)</div> 
    </div> 
</td> 
<td> 
    <div class="group"> 
     @Html.TextBoxFor(m => m.Products[index].Comment, new { @class = "productClass" })<br /> 
     <div class="mensajeError">@Html.ValidationMessageFor(m => m.Products[index].Comment)</div> 
    </div> 
</td> 
<td> 
    <div class="group"> 
     @Html.CheckBox(string.Format("Delete_{0}", index)) 
    </div> 
</td> 

這是我想隱藏(所有的人都在裏面productsTable表)中的字段生成的HTML。

<div class="group"> 
    <input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Products_0__Id" name="Products[0].Id" type="hidden" value="0" /> 
    <input data-val="true" data-val-number="The field Law must be a number." data-val-required="The Law field is required." id="Products_0__Law" name="Products[0].Law" type="hidden" value="1" /> 
    <input data-val="true" data-val-length="Must be 14 characters long" data-val-length-max="14" data-val-length-min="14" data-val-required="Product&#39;s code is requiered" id="Products_0__ProductCode" name="Products[0].ProductCode" type="number" value="" /> 
    <div class="mensajeError"><span class="field-validation-valid" data-valmsg-for="Products[0].ProductCode" data-valmsg-replace="true"></span></div> 
</div> 

搜索我已經找到了幫手@{ Html.EnableClientValidation(false); },但我不知道如何使用它,我還沒有發現任何完整的例子。

我沒有這個條件在Razor視圖來顯示一個輸入文件:

@if (Model.LawId == 1) 
{ 
    <input name = "ChinaCodes" id = "ChinaCodes" class="upload" type="file"> 
} 

我必須爲每個字段做同樣的或我能做到這一點全球一次爲所有的領域?

+1

您需要使用條件驗證屬性,例如[萬無一失(http://foolproof.codeplex.com/ )'[RequiredIf]'屬性,或者如果你想自己寫 - [ASP.NET MVC 3驗證完整指南 - 第2部分](https://www.devtrends.co.uk/blog/the-在asp.net-mvc-3-part-2中完成指南 - 驗證 - ) –

+0

嗨,@StephenMuecke。你是我的編碼守護天使。 – VansFannel

回答

1

我已經做到了在@body節的開頭添加此:

@section Body 
{ 
    @if (Model.LawId == 1) 
    { 
     Html.EnableClientValidation(false); 
     Html.EnableUnobtrusiveJavaScript(false); 
    } 

    [ ... ] 
}