2010-09-29 33 views
1

名称字段需要验证为以大写字母开头,并且不允许采用数字。我会用正则表达式来做这件事。实现MVC模式。哪里是定义字段验证的最佳位置?

我应该有控制器发送被输入到检查类的值,并发送相应的错误味精的回UI和检查,然后调用后,它写入DB
OR
我应该有类控制器将“值输入”发送到将其写入数据库的类,然后此方法调用验证方法?

回答

0

第一种方法似乎更正确的,因为数据库访问的逻辑不应与验证混合。

+0

请告诉我“标准”的方式做到这一点?我的意思是根据最佳做法和所有? – 2010-09-29 07:08:36

+0

控制器在调用数据访问层之前调用验证逻辑层。 – 2010-09-29 07:09:26

+0

控制器本身应该调用它还是应该在UI中有触发器? (对不起,我是一个业余爱好者。) – 2010-09-29 07:12:33

1

你可以使用(我使用的电子邮件验证)这样的事情

[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()){%> //您的代码

+0

代码不是问题。我想知道在什么级别的MVC应该实施。 UI代码中的触发器,控制器调用它或DB写入类调用它。验证错误应该如何在“最佳实践” – 2010-09-29 07:15:44

+0

之下实施,以便控制器执行此操作。疑难杂症。 – 2010-09-29 07:16:48

+0

如果你在你的视图中添加这些行,那么它将开始验证用户界面以及使用JS。 <%= Html.ValidationSummary( “帐户创建不成功,请更正错误,然后再试一次。”)%> <%Html.EnableClientValidation(); 使用(Html.BeginForm()){%> – Hasu 2010-09-29 11:26:07

0

该控制器的目的是验证输入并为模型提供有效的输入。您的模型不应该关注视图提供的输入。它应该只专注于业务逻辑。您可以在客户端添加一些验证代码,以方便使用,但出于安全目的,它也需要出现在服务器端。

你的第一个做法是正确的......继续吧......

+0

我想验证被提上模型,作为元类。所以模型会验证自己是否被业务逻辑使用? – jimplode 2010-09-29 11:24:02

+0

取决于你正在谈论什么样的验证......我在说用户输入验证.eg:检查用户是否输入了电子邮件ID ...是输入数字等。 – Mulki 2010-09-29 15:40:46

0

在我看来,这一切都取决于您要执行什么样的验证:
1.如果你不想一个字段是空的,我会在查看图层上进行检查。这是大多数正则表达式可以应用的地方。
2.如果我要确保用户输入(,说一个用户名)是唯一的或没有,我会做验证控制器端,并通过任何留言反馈回视图。在后者中,控制器可能依赖于数据访问层或服务层的抽象来进行实际检查。

相关问题