2016-07-11 4 views
0

Минимальный код СтруктураMVC5: Просмотр не подчиняющегося правильный ViewModel

У меня есть два ViewModels cmsViewModel и 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; } 
    } 

Метод действия в контроллере выглядит следующим образом:

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

      return View("CMSchedule", model); 

     } 

The View CMSConfim.cshtml выглядит следующим образом:

@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;" /> 


} 

Я хотел бы добавить, что я могу отображать правильные значения в полях отображения в форме. Ошибка при отправке формы.

Ошибка

Теперь, когда я отправить форму через Back. Я получаю следующую ошибку. Модель в словаре относится к типу 'cmsViewModel', но требуется тип 'Назначения' Пожалуйста, предложите, что я могу делать неправильно.

+0

Как выглядит ваш контроллер '[HttpGet]'? – Gareth

+0

Благодарим вас за ответы. На самом деле проблема была связана с дополнительным аргументом «Command» в действии. Я включил его, чтобы отслеживать нажатую кнопку в представлении. Все работает отлично после удаления этого. Но теперь я пытаюсь понять, как отслеживать нажатую кнопку. Должен ли я отправлять скрытое значение из значения? –

ответ

1

Ваш тип пост вид модели "назначения", но ваш Html.BeginForm также маршрутизации на "AppointmentsController"

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

Этот маршрут ожидает следующий

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

    } 
} 

Обновите свой Html.BeginForm, если имя контроллера ошибочно

Я не вижу мата h для параметра «Command».

0

Почему у вас в вашей бритве sintax cmsViewModel? Вы ожидаете отправить presmets, но есть cmsVM. Также в вашем контроллере вы ожидаете cmsVM. Вам нужно назначить встречу в бритве, а также ожидать ее в своем контроллере.

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

     return View("CMSchedule", model); 

    } 

Или, если вы хотите приобрести оба контроллера.

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

     return View("CMSchedule", model); 

    } 
Смежные вопросы