【问题标题】:Disable Required Validation Specific Field in the View ASP.NET MVC 4在视图中禁用必需的验证特定字段 ASP.NET MVC 4
【发布时间】:2012-12-03 18:31:12
【问题描述】:

如果有人能给我一些提示,我将不胜感激。

我找了一阵子,竟然发现了一个帖子,我以为可以解决我的问题,但是没有。

Disable Required validation attribute under certain circumstances

基本上我有一个简单的 User.cs 模型,其中有用户名、FirstName、LastName 和 SignupDate

都有所需的注释,我想在不删除 Required 标记的情况下解决这个问题。

生成视图后,我会在视图中删除 SignupDate 的 html 代码:

 <div class="editor-label">
        @Html.LabelFor(model => model.SignupDate)
 </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.SignupDate)
        @Html.ValidationMessageFor(model => model.SignupDate)
 </div>

当我点击提交时,它不起作用。

如果我按照其他帖子中的建议进行操作

<div class="editor-label">
        @Html.LabelFor(model => model.SignupDate)
</div>
<div class="editor-field">
       @Html.TexBoxFor(model => model.SignupDate, new { data_val = false })
</div>

如果我把它留为空白也不起作用..

有什么建议吗?谢谢!!

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 jquery-validate validation


    【解决方案1】:

    您可以在视图上禁用客户端验证,并为那些您不想验证值的实体删除模型状态上的错误。

    就我而言,我只想在用户输入密码时更改密码。由于每次都将密码发送给客户端,因此使用 Html.HiddenFor 不是一个好方法,并且不应发送密码。

    我所做的是禁用视图上的客户端验证

    @model MyProject.Models.ExistingModelWithRequiredFields
    
    @{
        ViewBag.Title = "Edit";
        Html.EnableClientValidation(false);
    }
    

    这允许我提交表单,即使是空值。请注意,所有客户端验证都被忽略,但服务器验证仍在运行,因此您需要清除那些不需要执行的验证。为此,请转到控制器中的操作并删除您需要的每个属性的错误

    public ActionResult Edit(ExistingModelWithRequiredFields updatedModel)
    {
        var valueToClean = ModelState["RequiredPropertyName"];
        valueToClean.Errors.Clear(); 
        if(ModelState.IsValid)
        {
            ...
            //Optionally you could run validations again 
            if(TryValidateModel(updatedModel)
            {
                ...
            }
            ...
        }
        ...
    }
    

    【讨论】:

    • 这仍然不起作用。 ModelState.IsValid 变为“TRUE”,但实体不允许添加到数据库中,尽管我将该字段设置为允许为空。我错过了什么吗?
    【解决方案2】:

    我认为这应该可以解决它,假设 model.SignupDate 持有一个值:

    <%: Html.HiddenFor(model => model.SignupDate) %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-10
      相关资源
      最近更新 更多