名称字段需要验证为以大写字母开头,并且不允许采用数字。我会用正则表达式来做这件事。实现MVC模式。哪里是定义字段验证的最佳位置?
我应该有控制器发送被输入到检查类的值,并发送相应的错误味精的回UI和检查,然后调用后,它写入DB
OR
我应该有类控制器将“值输入”发送到将其写入数据库的类,然后此方法调用验证方法?
名称字段需要验证为以大写字母开头,并且不允许采用数字。我会用正则表达式来做这件事。实现MVC模式。哪里是定义字段验证的最佳位置?
我应该有控制器发送被输入到检查类的值,并发送相应的错误味精的回UI和检查,然后调用后,它写入DB
OR
我应该有类控制器将“值输入”发送到将其写入数据库的类,然后此方法调用验证方法?
第一种方法似乎更正确的,因为数据库访问的逻辑不应与验证混合。
你可以使用(我使用的电子邮件验证)这样的事情
[Required(ErrorMessageResourceType = typeof(CCSModelResources), ErrorMessageResourceName = "ANTCommonTextRequiredMessage")]
[RegularExpression(@"^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$",
ErrorMessageResourceType = typeof(CCSModelResources), ErrorMessageResourceName = "ANTCommonTextRegularExpressionMessage")]
public new string EmailAddress
{
get { return base.EmailAddress; }
set { base.EmailAddress = value; }
}
和你的控制器代码像
[Authorize]
[HttpPost]
public ActionResult UpdatePersonalDetails(FormCollection form)
{
regUserWizard.PersonalDetails = new MVCPersonalDetails();
if (!TryUpdateModel<MVCPersonalDetails>(regUserWizard.PersonalDetails, form.ToValueProvider()))
{
return View("UpdateUser", regUserWizard);
}
else
{
//you code
}
return RedirectToAction("Index", "Home");
}
查看喜欢
代码<%= HTML .ValidationSummary( “帐户创建不成功,请更正错误,然后再试一次。”)%> <%Html.EnableClientValidation();使用(Html.BeginForm()){%> //您的代码
代码不是问题。我想知道在什么级别的MVC应该实施。 UI代码中的触发器,控制器调用它或DB写入类调用它。验证错误应该如何在“最佳实践” – 2010-09-29 07:15:44
之下实施,以便控制器执行此操作。疑难杂症。 – 2010-09-29 07:16:48
如果你在你的视图中添加这些行,那么它将开始验证用户界面以及使用JS。 <%= Html.ValidationSummary( “帐户创建不成功,请更正错误,然后再试一次。”)%> <%Html.EnableClientValidation(); 使用(Html.BeginForm()){%> – Hasu 2010-09-29 11:26:07
在我看来,这一切都取决于您要执行什么样的验证:
1.如果你不想一个字段是空的,我会在查看图层上进行检查。这是大多数正则表达式可以应用的地方。
2.如果我要确保用户输入(,说一个用户名)是唯一的或没有,我会做验证控制器端,并通过任何留言反馈回视图。在后者中,控制器可能依赖于数据访问层或服务层的抽象来进行实际检查。
请告诉我“标准”的方式做到这一点?我的意思是根据最佳做法和所有? – 2010-09-29 07:08:36
控制器在调用数据访问层之前调用验证逻辑层。 – 2010-09-29 07:09:26
控制器本身应该调用它还是应该在UI中有触发器? (对不起,我是一个业余爱好者。) – 2010-09-29 07:12:33