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

C# 禁用单个(已禁用)的验证@Html.EditorFor,c#,asp.net-mvc,html,razor,C#,Asp.net Mvc,Html,Razor,我已经读过很多书了,做这件事的方法似乎是针对不同的动作/控制器使用不同的视图模型(这在imo中有点过分了) 我想 @Html.EditorFor(model => model.Ingredient.Name, new { htmlAttributes = new { @class = "form-control", disabled = "disabled", data_val = "false"} }) 可能有用,但不幸的是不行 有人有什么想法吗?在渲染字段并重新启用之前,可以在Raz

我已经读过很多书了,做这件事的方法似乎是针对不同的动作/控制器使用不同的视图模型(这在imo中有点过分了)

我想

@Html.EditorFor(model => model.Ingredient.Name, new { htmlAttributes = new { @class = "form-control", disabled = "disabled", data_val = "false"} })
可能有用,但不幸的是不行


有人有什么想法吗?

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

您可以利用来对一个或多个元素进行客户端验证

这样做的好处是它是泛型的,只需添加所使用的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"} })

当涉及到将元素声明为禁用时,MVC可能很有趣。我用readonly来回避这个问题。只需将disabled更改为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" />
然后将类添加到html中

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

我创建了一个示例,向您展示了所有不引人注目的验证(ASP.NET MVC使用的那种)都是基于查找和解析每个对象上的
数据
属性的。它们包含验证引擎运行所需的所有信息,并且只包含包含
data val=“true”
的元素

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

下面是一个例子:

@Html.TextBoxFor(m=>m.BatchId,新的{data\u val=“false”})

只读编辑器不再是编辑器。为了“更准确”,我应该建议使用一个displaytemplate。如果它不需要是EditorFor,则更改为TextBoxFor,并设置@readonly=“readonly”更精细,您希望对元素做什么?@Scanner。这是一个编辑视图。元素是成分的标题/名称。我想像表单的其他部分一样显示它,但显示为灰色。这没什么大不了的,我可以把它作为标签展示。我只是想有一个简单的方法来排除对property@rory,那么您所需要的就是css。请参阅我的更新版。这里的主要问题是:是否要禁用元素的验证,还是要将该项设置为只读?@Tom B。如果可能,两者都可以。两者都同样重要。可能重复我尝试过的方法,但错误出现在db.SaveChanges()上;很好的解决方案。值得注意的是,默认值为,因此您可能不希望完全覆盖该值。您可能可以设置为“`”:hidden、.ignore”来同时忽略这两个选项,尽管我还没有测试过。这对我很有用。好建议
@Html.EditorFor(model => model.Ingredient.Name, new { htmlAttributes = new { @class = "form-control, input-disabled", readonly= "readonly", data_val = "false"} })