在视图ASP.NET MVC 4中禁用所需的特定于验证的字段

时间:2012-12-16 11:47:33

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

如果有人能给我一些暗示我会很感激。

我正在寻找一段时间,我甚至找到了一个帖子,我认为它可以解决我的问题,但事实并非如此。

Disable Required validation attribute under certain circumstances

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

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

生成视图后,我在视图中删除 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>

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

有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:9)

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

在我的情况下,我只想在用户输入密码时更改密码。使用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)
        {
            ...
        }
        ...
    }
    ...
}

答案 1 :(得分:0)

我认为这应该解决它,假设model.SignupDate包含一个值:

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