【问题标题】:MVC5 : View not submitting correct ViewModelMVC5:视图未提交正确的 ViewModel
【发布时间】:2016-07-11 20:51:45
【问题描述】:

最小代码结构

我有两个 ViewModel cmsViewModelappointments

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

        }

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' 类型,但需要是 'appointments' 类型 请建议我可能做错了什么。

【问题讨论】:

  • 你的[HttpGet]控制器是什么样子的?
  • 感谢您的所有回答。实际上问题是由于操作中的附加“命令”参数。我包含它以跟踪在视图中单击的按钮。删除后一切正常。但现在我试图弄清楚如何跟踪单击的按钮。我应该从 value 中发送一个隐藏的 value 吗?

标签: c# asp.net razor mvvm asp.net-mvc-5


【解决方案1】:

您的帖子视图模型类型是“约会”,但您的 Html.BeginForm 也路由到“约会控制器”

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

这条路线期待以下

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

    }
}

如果控制器名称错误,请更新您的 Html.BeginForm

我也没有看到参数“Command”的匹配项。

【讨论】:

    【解决方案2】:

    为什么你的剃须刀中有 sintax cmsViewModel?您希望提交约会,但有 cmsVM。同样在您的控制器中,您期待 cmsVM。您需要在 razor 中提供约会VM,并且还需要在控制器中提供它。

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

    【讨论】:

      猜你喜欢
      • 2017-11-15
      • 1970-01-01
      • 2012-06-18
      • 2018-01-02
      • 1970-01-01
      • 2012-10-19
      • 2019-08-31
      • 2017-12-21
      • 1970-01-01
      相关资源
      最近更新 更多