我一直在做一些研究,但是,当MVC 3中需要ModelBinding时,我已经有点麻烦了解。我创建了一个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");
    }
}
.

我的邀请雷奎斯特控制器具有以下操作方法

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填充有可用事件列表的。我的问题是我期待invitiationrequestviewmodel映射到HTTPPOST创建方法。相反,我只是收到错误说“网站无法显示页面”。 当我使用签名时:

public ActionResult Create(FormCollection collection){ }
.

然后我可以看到发布的值。我希望不得不在控制器中做自己的映射代码。
是一个自定义型号机器答案吗?

编辑 我正在使用一款强型InvitiationRequestViewMeDel的视图,这是DDL代码

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

有帮助吗?

解决方案

您必须为InvitationRequestViewModel指定一个不可分割的构造函数,以便默认模型插入物可以实例化。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top