Domanda

Ho fatto un po 'di ricerca su questo, ma sto avendo un piccolo problema la comprensione quando è necessario il modello di modellismo in MVC 3. Ho creato un mirino per fornire dati alla mia visualizzazione.

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

Il mio controller InvitationRequest ha i seguenti metodi di azione

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

Posso raggiungere la vista Crea senza problemi e il DDL è popolato con un elenco di eventi disponibili.Il mio problema è che mi aspettavo che l'invitationRequestviewModel sia mappato al metodo di Creazione httpPost.Invece, ho solo un errore che dice "Il sito Web non può visualizzare la pagina". Quando uso la firma:

public ActionResult Create(FormCollection collection){ }
.

Allora posso vedere i valori pubblicati.Avevo sperato di non dover fare il mio codice di mapping nel controller.
È un modello personalizzato per la risposta?

Modifica Sto usando una vista fortemente digitata di tipo InvitationRequestviewModel e questo è il codice DDL

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

È stato utile?

Soluzione

È necessario specificare un costruttore senza parametri per il InvitationRequestViewModel in modo che il binder del modello predefinito possa istanziarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top