Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 没有发布数据时,MVC Razor验证错误显示在页面加载上_C#_Asp.net Mvc_Razor_Data Annotations_Asp.net Mvc Validation - Fatal编程技术网

C# 没有发布数据时,MVC Razor验证错误显示在页面加载上

C# 没有发布数据时,MVC Razor验证错误显示在页面加载上,c#,asp.net-mvc,razor,data-annotations,asp.net-mvc-validation,C#,Asp.net Mvc,Razor,Data Annotations,Asp.net Mvc Validation,我把数据注释弄得一团糟。当我点击一个链接进入一个页面时,会显示验证消息,但我希望验证消息不会显示,除非数据已经发布 视图: 型号: [Required(ErrorMessage = "Email is required")] [DataType(DataType.EmailAddress)] [EmailAddress] [Display(Name = "Email Address: ")] public string EmailAddress { get; set; } 控制器: [Http

我把数据注释弄得一团糟。当我点击一个链接进入一个页面时,会显示验证消息,但我希望验证消息不会显示,除非数据已经发布

视图:

型号:

[Required(ErrorMessage = "Email is required")]
[DataType(DataType.EmailAddress)]
[EmailAddress]
[Display(Name = "Email Address: ")]
public string EmailAddress { get; set; }
控制器:

[HttpGet]
        public ActionResult AddUser()
        {
            return View();
        }

        [HttpPost]
        public ActionResult AddUser(UserCreateViewModel user)
        {
            if (ModelState.IsValid)
            {
                var success = UserRepository.AddUser(user);

                if (success)
                {
                    return View("Success");
                }
            }

            return View("AddUser");
        }

正如我所说,我的问题发生在AddUser视图的页面加载上。当我点击链接查看AddUser页面时,加载后会显示验证消息,但此时没有发布数据,模型为空。

将验证样式设置为:

.validation-summary-valid { display:none; }

所以默认情况下它是隐藏的。错误将触发它显示。

绑定用户后,您可以清除模型状态:

ModelState.Clear();
这是因为
ModelBinder
将在绑定时设置
ModelState
。 在绑定模型并返回具有相同模型的视图的每个操作中,您都会遇到此问题

[HttpPost]
public ActionResult AddUser(UserCreateViewModel user)
{
    if (ModelState.IsValid)
    {
        var success = UserRepository.AddUser(user);

        if (success)
        {
            return View("Success");
        }
    }

    ModelState.Clear(); // <-------
    return View("AddUser");
}
[HttpPost]
公共操作结果AddUser(UserCreateViewModel用户)
{
if(ModelState.IsValid)
{
var success=UserRepository.AddUser(用户);
如果(成功)
{
返回视图(“成功”);
}
}
ModelState.Clear();//
$('.field validation error').html(“”;

每当页面加载时触发验证时,该“.field validation valid”值将自动添加到触发的输入元素的class属性中

通过添加CSS将none显示为特定类的值,您将不再在初始页面加载时看到验证消息


触摸特定输入元素后,验证消息仍将正常显示。

我使用的是自定义CSS文件,已停止包含旧的Site.CSS(其中包含您的上述修复)修复了我的问题。我们到底为什么需要手动操作。为什么它不是由框架本身处理的。:-|这很可能是因为默认的Site.css已更改或丢失。是否愿意解释这如何回答OP的问题?这对OP没有帮助,但对我有帮助。非常感谢!这对我很有帮助。我添加了ModelState.Clear()这是隐藏!!好朋友(y)
[HttpPost]
public ActionResult AddUser(UserCreateViewModel user)
{
    if (ModelState.IsValid)
    {
        var success = UserRepository.AddUser(user);

        if (success)
        {
            return View("Success");
        }
    }

    ModelState.Clear(); // <-------
    return View("AddUser");
}
.field-validation-valid {
  display: none;
}