在单个(已禁用)@Html.EditorFor 上禁用验证
Posted
技术标签:
【中文标题】在单个(已禁用)@Html.EditorFor 上禁用验证【英文标题】:Disable Validation on a single (disabled) @Html.EditorFor 【发布时间】:2020-04-29 14:58:26 【问题描述】:我读到过,这样做的给定方式似乎是为不同的动作/控制器提供不同的视图模型(这有点过分了 imo)。
我以为
@html.EditorFor(model => model.Ingredient.Name, new htmlAttributes = new @class = "form-control", disabled = "disabled", data_val = "false" )
可能有效,但不幸的是没有。
有人有什么想法吗?
【问题讨论】:
这里的主要问题是:您希望禁用该元素的验证,还是希望将该项目设为只读? @Tom B. 如果可能的话。两者同等重要。 ASP .NET MVC Disable Client Side Validation at Per-Field Level的可能重复 【参考方案1】:在将元素声明为禁用时,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" />
添加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
【讨论】:
A 只读编辑器不再是编辑器了。为了“更正确”,我应该提出一个显示模板。 如果不需要是 EditorFor 则改为 TextBoxFor 并设置 @readonly = "readonly" 即可 Rory 你到底想用这个元素做什么? @Scanner。它是一个编辑视图。元素是成分的标题/名称。我想像表格的其余部分一样显示它,但显示为灰色。没什么大不了的,我可以将其显示为标签。我只是认为有一种简单的方法可以排除对属性的验证 @rory,那么你只需要css。查看我的更新编辑【参考方案2】:您可以使用.ignore 对一个或多个元素启用客户端验证。
这样做的好处是它是通用的,只需添加使用的忽略类即可应用于多个元素。
在你的 jquery 代码中添加这个
$.validator.setDefaults(
ignore: ".ignore"
);
在您希望忽略/禁用客户端验证的每个元素上应用忽略类。
@Html.EditorFor(model => model.Ingredient.Name, new htmlAttributes = new @class = "form-control ignore", disabled = "disabled", data_val = "false" )
【讨论】:
很好的解决方案。值得注意的是,默认值为ignore: ":hidden"
,因此您可能不想完全覆盖它。您可能可以设置为 `":hidden,.ignore" 来忽略两者,尽管我还没有测试过。
为我工作。很好的建议【参考方案3】:
所有不显眼的验证(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" )
【讨论】:
【参考方案4】:您可以在渲染字段之前在 Razor 视图中禁用客户端验证并重新启用。我相信您的问题已经得到解答here
【讨论】:
我试过这个,但错误在 db.SaveChanges();以上是关于在单个(已禁用)@Html.EditorFor 上禁用验证的主要内容,如果未能解决你的问题,请参考以下文章