2016-07-11 16 views
0

Minimal CodestrukturMVC5: Ansicht nicht korrekt Ansichtsmodell Absenden

Ich habe zwei Viewmodel cmsViewModel und appointments

public partial class cmsViewModel 
    { 
     public string rows { get; set; } 
     public DateTime appt_date_time { get; set; } 
     public int appt_id { get; set; } 
     public List<community_meeting_schedule> lst { get; set; } 

     public cmsViewModel() 
     { 
      rows = null; 
      appt_date_time = DateTime.Today; 
      lst = null; 
      appt_id = -1; 

     } 

    } 



public partial class appointments 
    { 

     public int appt_client_id { get; set; } 
     public int customer_id { get; set; } 
     [Key] 
     public int appt_id { get; set; } 

     public DateTime appt_date_time { get; set; } 
     public DateTime time_stamp { get; set; } 
    } 

Die Aktionsmethode in der Steuerung wie folgt aussieht:

[HttpPost] 
     public ActionResult CMSConfim(cmsViewModel model, string Command) 
     { 

      return View("CMSchedule", model); 

     } 

The View CMSConfim.cshtml sieht wie folgt aus:

@model Scheduler_MVC.Models.cmsViewModel 
@using (Html.BeginForm("CMSConfim", "appointments", FormMethod.Post)) 

{ 


    @Html.HiddenFor(model => model.appt_id, new { id = "appt_id" }) 
    @Html.HiddenFor(model => model.appt_client_id, new { id = "appt_client_id" }) 
    @Html.HiddenFor(model => model.appt_date_time) 
    @Html.HiddenFor(model => model.appt_status) 
    @Html.HiddenFor(model => model.appt_type) 
    @Html.HiddenFor(model => model.lst) 

     <input type="submit" value="Back" id="backBtn" class="btn btn-default" /> 
     <input type="button" value="Submit" id="submitBtn" class="btn btn-default" style="display:inline-block;" /> 


} 

Ich möchte hinzufügen, dass ich in der Lage bin, korrekte Werte in den Anzeigefeldern auf dem Formular zu rendern. Der Fehler tritt beim Absenden des Formulars auf. Jetzt

Fehler

wenn ich senden Sie das Formular durch Back. Ich erhalte den folgenden Fehler. Das Modell im Wörterbuch ist vom Typ 'cmsViewModel' aber erforderlich ist das vom Typ 'Termine' Bitte schlagen Sie vor, was ich falsch machen könnte.

+0

Wie sieht dein '[HttpGet]' Controller aus? – Gareth

+0

Vielen Dank für alle Antworten. Eigentlich lag das Problem an dem zusätzlichen 'Command'-Argument in der Aktion. Ich habe es eingeschlossen, um den Klick auf die Schaltfläche in der Ansicht zu verfolgen. Alles funktioniert gut nachdem ich das entfernt habe. Aber jetzt versuche ich herauszufinden, wie man den angeklickten Knopf verfolgt. Soll ich einen versteckten Wert vom Wert senden? –

Antwort

1

Ihre Post Ansicht Modell Typ "Termine", aber Ihre Html.BeginForm routet auch auf eine "AppointmentsController"

@using (Html.BeginForm("CMSConfim", "appointments", FormMethod.Post)) 

Diese Route

public class AppointmentsController : Controller 
{ 
    public Action CMSConfirm(appointments model) 
    { 

    } 
} 

die folgende

erwartet Aktualisieren Sie Ihre Html.BeginForm, wenn der Controller-Name falsch ist

Ich sehe keine Matc h für Parameter "Command" entweder.

0

Warum haben Sie in Ihrem Rasierer sintax cmsViewModel? Sie erwarten, dass Sie einen Termin einreichen, aber es gibt cmsVM. Auch in Ihrem Controller erwarten Sie cmsVM. Sie müssen TermineVM in Rasierer und auch in Ihrem Controller erwarten.

[HttpPost] 
    public ActionResult CMSConfim(appointments model, string Command) 
    { 

     return View("CMSchedule", model); 

    } 

Oder wenn Sie beide in Controller bekommen möchten.

[HttpPost] 
    public ActionResult CMSConfim(cmsViewModel model, appointments appoint, string Command) 
    { 

     return View("CMSchedule", model); 

    }