2011-05-13 87 views
2

同时使用模式和自定义ValidationModel我有一个这样的视图(不重要的东西离开了):ASP.NET MVC3在查看

@model MyProject.Models.Accounts 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Name) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Name) 
     </div> 

现在,我有一个单独的模型我想要使用验证。是否有可能在View中使用我的Model和Data验证模型?类似这样的:

@model MyProject.Models.Accounts 
@validaitonmodel MyProject.Models.AccountValidationModel 

      <div class="editor-label"> 
       @Html.LabelFor(model => model.Name) 
      </div> 
      <div class="editor-field"> 
       @Html.EditorFor(model => model.Name) 
       @Html.ValidationMessageFor(validationmodel => validationmodel.Name) 
      </div> 

在此先感谢。

编辑

通过“模型”我的意思是在全自动通过的.edmx(在Ado.net自跟踪实体)

通过ValidationModel我的意思是一个自定义类生成的模型像这样:

public class AccountValidationModel 
{ 
    [Required] 
    public String Name {get; set;} 
} 
+0

我对你的问题有点困惑。你能澄清一下你的意思吗?“你有一个单独的模型,你想用于验证。”你能举一个更具体的例子吗? – JasCav 2011-05-13 15:01:11

+0

@JasCav请看我的编辑。 – Matthias 2011-05-13 18:15:26

回答

3

我觉得一般比较可以接受的做法是要么:

  1. 将属性添加到您的数据模型中。
  2. 绑定您的视图到一个单独的视图模型(在这种情况下,你的AccountValidationModel),并使用映射工具(如AutoMapper)到您的两款车型之间的数据映射。
+1

我喜欢#2。使您的数据和业务层保持在视图之外。 – Necros 2011-05-13 18:43:21

+0

谢谢,AutoMapper看起来像我需要的东西。 – Matthias 2011-05-14 19:21:38

1

可能是MetadataType属性可以帮助你吗? http://msdn.microsoft.com/en-us/library/ee256141.aspx

验证模型必须实现所有要验证的属性,并且MetadataTypeAttribute必须应用于模型本身。

从计算器快速样品: ASP.Net C# validating model based on MetadataType

或者,喜欢的男生,看看另一种方式来验证与fluentvalidation(没试过) http://fluentvalidation.codeplex.com/wikipage?title=mvc&referringTitle=Documentation

+0

这个。做到这一点...... – 2011-05-13 18:29:20

+0

但是如果我的视野中有像“ConfirmName”那样需要验证但我的模型中不存在的字段呢? – Matthias 2011-05-14 09:02:50

+0

是的,这就是为什么Domain Model与View Model不同的原因。就像@Jerad Rose所说:使用AutoMapper创建ViewModel和地图属性可能是最好也是最简单的方法。 http://codeclimber.net.nz/archive/2009/10/27/12-asp.net-mvc-best-practices.aspx此外,您可以在ViewModel上轻松设置ModelBinder属性。 – 2011-05-14 16:04:56