2011-05-13 49 views
1

我一直在做这方面的研究,但是,我在MVC 3中需要模型绑定时有点麻烦。我已经创建了一个ViewModel来为我的创建视图提供数据。我是否需要一个自定义模型绑定器来创建我的创建操作?

public class InvitationRequestViewModel 
{ 
    public InvitationRequest InvitationRequest { get; private set; } 

    public IEnumerable<SelectListItem> EventsList { get; private set; } 

    public string EventId { get; set; } 

    public InvitationRequestViewModel(InvitationRequest request) 
    { 
     InvitationRequest = request; 
     EventsList = new SelectList(MyRepositoryAndFactory.Instance.FindAllEvents() 
       .Select(events => new SelectListItem 
       { 
        Value = events.ID.ToString(), 
        Text = String.Format("{0} - {1} - {2}", events.Name, events.Location, events.StartDate.ToShortDateString()) 
       } 
      ), "Value", "Text"); 
    } 
} 

我InvitationRequest控制器具有下列动作方法

public ActionResult Create() 
    { 
     InvitationRequest request = new InvitationRequest(User.Identity.Name); 

     return View(new InvitationRequestViewModel(request)); 
    } 

    [HttpPost] 
    public ActionResult Create(InvitationRequestViewModel newInvitationRequest) 
    { 
     try 
     { 
      if (!ModelState.IsValid) return View(newInvitationRequest); 

      newInvitationRequest.InvitationRequest.Save(); 
      MyRepositoryAndFactory.Instance.CommitTransaction(); 
      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      ModelState.AddModelError("","Invitation Request could not be created"); 
     } 

     return View(newInvitationRequest); 
    } 

我能达到创建视图,没有任何问题和DDL填充了可用事件的列表。我的问题是,我期待InvitationRequestViewModel映射到HttpPost的创建方法。相反,我只是收到一条错误消息,说“网站无法显示网页”。 当我使用签名时:

public ActionResult Create(FormCollection collection){ } 

然后我可以看到发布的值。我曾希望不必在控制器中执行我自己的映射代码。
是一个自定义ModelBinder的答案?

编辑 我使用类型InvitationRequestViewModel的强类型视图,这是DDL代码

<div class="editor-label"> 
     @Html.LabelFor(model => model.InvitationRequest.Event) 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownListFor(x => x.EventId, Model.EventsList) 
    </div> 

回答

1

你必须指定InvitationRequestViewModel参数的构造函数,因此默认的模型粘合剂可实例化。

相关问题