簡體   English   中英

在單個(已禁用)@Html.EditorFor 上禁用驗證

[英]Disable Validation on a single (disabled) @Html.EditorFor

我已經讀到,給定的執行此操作的方法似乎是針對不同的操作/控制器使用不同的視圖模型(在我看來有點矯枉過正)。

我想

@Html.EditorFor(model => model.Ingredient.Name, new { htmlAttributes = new { @class = "form-control", disabled = "disabled", data_val = "false"} })

可能有效但不幸的是沒有。

有人有什么想法嗎?

您可以使用.ignore來關閉對一個或多個元素的客戶端驗證。

這樣做的好處是它是通用的,只需添加使用過的忽略類即可應用於多個元素。

將此添加到您的 jquery 代碼中

$.validator.setDefaults({
    ignore: ".ignore"
});

在您希望忽略/禁用客戶端驗證的每個元素上應用忽略類。

@Html.EditorFor(model => model.Ingredient.Name, new { htmlAttributes = new { @class = "form-control ignore", disabled = "disabled", data_val = "false"} })

當涉及到將元素聲明為禁用時,MVC 可能很有趣。 我改用 readonly 來解決這個問題。 只是將禁用更改為只讀,如下所示。

@Html.EditorFor(model => model.Ingredient.Name, new { htmlAttributes = new { @class = "form-control", readonly= "readonly", data_val = "false"} })

或者替代方法是使用輸入 html 元素

<input type="text" name="Ingredient.Name" id="Ingredient_Name" readonly="readonly" class="form-control, input-disabled" />

添加 CSS 類

.input-disabled /* CHANGE STYLING OF READONLY FIELDS */
{
    background-color: #EEEEEE;    
}

然后將您的課程添加到您的html

@Html.EditorFor(model => model.Ingredient.Name, new { htmlAttributes = new { @class = "form-control, input-disabled", readonly= "readonly", data_val = "false"} })

我創建了以下內容來向您展示jsfiddle

所有不顯眼的驗證(ASP.NET MVC 使用的那種)都基於查找和解析每個對象的data屬性。 這些包含驗證引擎運行所需的所有信息,並且僅包含具有data-val="true"的元素。

您傳遞的任何 HTML 屬性都將覆蓋任何默認屬性,因此最簡單的方法是強制data-val="false"並且表單元素不會包含在驗證引擎中,其他任何相關標簽都不會解析。

下面是ASP .NET MVC 在每個字段級別禁用客戶端驗證的示例:

@Html.TextBoxFor(m => m.BatchId, new { data_val = "false" })

在呈現字段並重新啟用之前,您可以在 Razor 視圖中禁用客戶端驗證。 我相信你的問題已經在這里得到回答

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM