禁用单个(已禁用)@ Html.EditorFor上的验证

时间:2016-01-14 12:45:22

标签: c# asp.net-mvc html5 razor

我已经读到了这样做的方法似乎是对不同的动作/控制器有不同的视图模型(这有点过分杀戮)。

我想

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

可能有效,但遗憾的是没有。

有没有人有任何想法?

4 个答案:

答案 0 :(得分:2)

在将元素声明为禁用时,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"} })

我创建了以下内容,向您展示{{3}}

答案 1 :(得分:1)

您可以使用.ignore来启用一个或多个元素的客户端验证。

关于这个的好处是它是通用的,只需添加使用的忽略类就可以应用于多个元素。

在你的jquery代码

中添加它
$.validator.setDefaults({
    ignore: ".ignore"
});

对要忽略的每个元素应用ignore类/禁用客户端验证。

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

答案 2 :(得分:1)

所有不显眼的验证(ASP.NET MVC使用的类型)都取决于在每个对象上查找和解析data属性。这些信息包含验证引擎需要运行的所有信息,并且仅包含data-val="true"的元素。

您传递的任何HTML属性都将覆盖任何默认属性,因此最简单的方法是强制data-val="false"并且表单元素不会包含在验证引擎中,并且其他任何依赖标记都不会被解析。

以下是ASP .NET MVC Disable Client Side Validation at Per-Field Level的示例:

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

答案 3 :(得分:0)

您可以在渲染字段并重新启用之前在Razor视图中禁用客户端验证。我相信您的问题已经得到解答here