2010-09-15 62 views
1

我不确定我在这里做错了什么,甚至不知道我是否在正确的轨道上。我有一个视图模型,我从它创建一个下拉列表。这里是我的视图模型:验证MVC中的SelectList 2

public class ApplicationViewModel 
    { 
     public Application Application { get; private set; } 
     public SelectList AccountTypes { get; private set; } 

     public ApplicationViewModel(Application application, IEnumerable<AccountType> accountTypes) 
     { 
     Application = application; 
     AccountTypes = new SelectList(accountTypes, "AccountTypeID", "AccountTypeName", application.AccountTypeID); 
     } 
    } 

这里是我创建(获取)动作:

public ActionResult Create() 
     { 
     var viewModel = new ApplicationViewModel(new Application(), db.AccountTypes); 

     return View(viewModel); 
     } 

我的视图代码:

<%: Html.DropDownListFor(???, Model.AccountTypes, "-- Select --") %> 
       <%: Html.ValidationMessageFor(???) %> 

在上面的代码,我不完全确定必须进来什么?初始值是“ - 选择 - ”。如果用户点击提交按钮,并且下拉列表的值仍然是“ - 选择 - ”,那么它必须显示一条消息。

我也使用EF4。请有人建议做些什么。代码示例将不胜感激。

谢谢。

回答

2

如果你的看法是强类型,即:

Inherits="System.Web.Mvc.ViewUserControl<Model.NameSpace.ApplicationViewModel>" 

然后???在你的视图代码中应该是一个指向ViewModel中的项目的lambda表达式。 (我假设你的视图模型的应用对象具有将被分配基于下拉列表中值的属性?)

我假定你的应用程序对象具有ACCOUNTTYPE属性,例如:

???应该是这样的:

<%= Html.DropDownListFor(x => x.Application.AccountType, Model.AccountTypes) %> 

从下拉列表将填充您的应用程序模型ACCOUNTTYPE物业,并会从您的视图模型的AccountTypes填充值。

希望这会有所帮助。

- 编辑 -

在您的应用程序模型,使用的命名空间:

using System.ComponentModel.DataAnnotations; 

你上面的AccountTypes属性,添加

[Required(ErrorMessage="Account Type Required")] 

我认为这应该工作。

+0

感谢您的回答。是的,它是一个强类型的视图。它正确地填充你的方式,但我没有得到Html.ValidationMessageFor来触发如果没有选择任何东西。我试过Html.ValidationMessageFor(m => m.Application.AccountType),但它不起作用。 – 2010-09-15 08:47:02

+0

感谢它现在的作品:) – 2010-09-15 08:57:26

+0

不知道我是否可以在这里问这个,当我点击提交,然后我的应用程序没有AccountType或AccountTypeID。这是我的创建操作:公共ActionResult创建(应用程序应用程序)。这是如何设置的? – 2010-09-15 09:51:13