C# ASP.NET MVC中表单提交中的属性验证出错

C# ASP.NET MVC中表单提交中的属性验证出错,c#,asp.net,asp.net-mvc,validation,modelstate,C#,Asp.net,Asp.net Mvc,Validation,Modelstate,我在正在构建的ASP.NETMVC站点上有一个简单的表单。提交此表单,然后验证表单字段是否为null、空或格式不正确 但是,当我使用ModelState.addmodeleror()指示控制器代码中的验证错误时,我在重新呈现视图时会收到一个错误。在Visual Studio中,我发现以下行高亮显示为错误的位置: <%=Html.TextBox("Email")%> 注意:此适用于我的所有字段,而不仅仅是我的电子邮件字段,,只要它们无效这是ASP.NET MVC中的一个可怕的错误/功

我在正在构建的ASP.NETMVC站点上有一个简单的表单。提交此表单,然后验证表单字段是否为null、空或格式不正确

但是,当我使用
ModelState.addmodeleror()
指示控制器代码中的验证错误时,我在重新呈现视图时会收到一个错误。在Visual Studio中,我发现以下行高亮显示为错误的位置:

<%=Html.TextBox("Email")%>

注意:此适用于我的所有字段,而不仅仅是我的电子邮件字段,,只要它们无效

这是ASP.NET MVC中的一个可怕的错误/功能(无论调用什么),您可以通过如下方式调用帮助程序来修复:

ModelState.AddModelError("Email", "Should not be empty or invalid");
ModelState.SetModelValue("Email", new ValueProviderResult("raw value", "attempted value", CultureInfo.InvariantCulture));
顺便问一下,当您可以简单地注释视图模型时,是否有任何理由编写所有这些代码:

public class SomeViewModel
{
    [RegularExpression("Some bulletproof regex you could google to validate email address", ErrorMessage = "Should not be empty or invalid")]
    public string Email { get; set; }
}

然后让数据绑定器来完成繁重的工作。

这是ASP.NET MVC中的一个可怕的错误/功能(无论调用什么),您可以通过如下调用来修复它:

ModelState.AddModelError("Email", "Should not be empty or invalid");
ModelState.SetModelValue("Email", new ValueProviderResult("raw value", "attempted value", CultureInfo.InvariantCulture));
顺便问一下,当您可以简单地注释视图模型时,是否有任何理由编写所有这些代码:

public class SomeViewModel
{
    [RegularExpression("Some bulletproof regex you could google to validate email address", ErrorMessage = "Should not be empty or invalid")]
    public string Email { get; set; }
}

让数据活页夹来完成繁重的工作。

我无法复制

行动

[HttpPost]
public ActionResult Index(string email)
{
    if (string.IsNullOrEmpty(email))
    {
        ModelState.AddModelError("Email", "Should not be empty or invalid");
    }
    return View();
}
看法



您的电子邮件:


我无法复制

行动

[HttpPost]
public ActionResult Index(string email)
{
    if (string.IsNullOrEmpty(email))
    {
        ModelState.AddModelError("Email", "Should not be empty or invalid");
    }
    return View();
}
看法



您的电子邮件:


因此,对于第一个代码示例:您必须有两行,对吗?换句话说,我首先调用AddModelError,然后调用SetModelValue?另外,什么是原始值和尝试值?谢谢。是的,你需要两条线。RawValue指向具有用于更新的属性的对象。AttemptedValue存储用户实际输入的内容。我相信你可以把它们留空。你能举一个RawValue的例子,比如电子邮件属性吗?我有点困惑。所以,对于第一个代码示例:必须有两行,对吗?换句话说,我首先调用AddModelError,然后调用SetModelValue?另外,什么是原始值和尝试值?谢谢。是的,你需要两条线。RawValue指向具有用于更新的属性的对象。AttemptedValue存储用户实际输入的内容。我相信你可以把它们留空。你能举一个RawValue的例子,比如电子邮件属性吗?我有点困惑。