C# ASP.NET MVC中表单提交中的属性验证出错
我在正在构建的ASP.NETMVC站点上有一个简单的表单。提交此表单,然后验证表单字段是否为null、空或格式不正确 但是,当我使用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中的一个可怕的错误/功
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的例子,比如电子邮件属性吗?我有点困惑。