Frage

Ich habe ein wenig darüber recherchiert, aber ich habe ein wenig Probleme zu verstehen, wann Modelbinding in MVC 3 benötigt wird.Ich habe ein Ansichtsmodell erstellt, um Daten für meine Erstellungsansicht bereitzustellen.

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");
    }
}

Mein InvitationRequest-Controller verfügt über die folgenden Aktionsmethoden

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);
    }

Ich kann die Erstellungsansicht problemlos erreichen und die DDL wird mit einer Liste der verfügbaren Ereignisse gefüllt.Mein Problem ist, dass ich erwartet habe, dass das InvitationRequestViewModel der HttpPost-Erstellungsmethode zugeordnet wird.Stattdessen erhalte ich nur die Fehlermeldung "Die Website kann die Seite nicht anzeigen".Wenn ich die Signatur benutze:

public ActionResult Create(FormCollection collection){ }

dann kann ich die geposteten Werte sehen.Ich hatte gehofft, keinen eigenen Mapping-Code im Controller erstellen zu müssen.
Ist ein benutzerdefinierter Modellbinder die Antwort?

BEARBEITEN Ich verwende eine stark typisierte Ansicht vom Typ InvitationRequestViewModel und dies ist der DDL-Code

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

Lösung

Sie müssen einen parameterlosen Konstruktor für die angeben InvitationRequestViewModel der Standardmodellordner kann es also instanziieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top