5

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

我正在寻找一段时间,我什至找到了一个我认为它可以解决我的问题的帖子,但它没有。

在某些情况下禁用必需的验证属性

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

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

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

如果我将其保留为空白也不起作用..

有什么建议么?谢谢!!

4

2 回答 2

10

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

就我而言,我只想在用户输入密码时更改密码。使用 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)
        {
            ...
        }
        ...
    }
    ...
}
于 2013-03-06T13:34:41.447 回答
0

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

<%: Html.HiddenFor(model => model.SignupDate) %>
于 2012-12-16T11:52:12.213 回答