MVC Jquery Ajax call returning a view that claims it was passed the wrong model
我正在使用我的对话框。我在其中一个面板框中有一个创建表单。当通过ajax
The model item passed into the dictionary is of type 'Models.ViewModels.SystemMessage', but this dictionary requires a model item of type 'Models.CouponCampaign'.
以下是成功消息的部分视图:
1 2 3 4 | @model Redeemupon.Models.ViewModels.SystemMessage <img src="/Content/Images/Positive_48x48.png" alt=":-)"/> @Html.Raw(Model.Message) |
下面是传递这个局部视图的片段。
1 2 3 4 5 6 | var viewModel = new SystemMessage() { Message = message }; return PartialView(viewModel); |
最后,Ajax调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $("#couponCampaignForm").submit(function () { var queryString = $(this).serialize(); var action ="/CouponCampaign/Add?" + queryString; $.post(action, function (data) { //Load the resulting partial view into a facebox $.facebox(data); //Refresh the table var action ="/CouponCampaign/CouponCampaignTable"; $.get(action, function (data) { $("#ajaxTable").html(data); }); }); return false; }); |
加载到facebox中的原始视图使用
以下是我的globals.asax中的路由规则:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller ="Home", action ="Index", id = UrlParameter.Optional } // Parameter defaults ); routes.MapRoute( "RegisterStaff", // Route name "Account/RegisterStaff/{tid}/{email}" // URL with parameters ); routes.MapRoute( "ForgotPassword", // Route name "Account/ForgotPassword/{email}" // URL with parameters ); } |
编辑
因此,由于我从另一个操作调用SuccessMessage(字符串消息),并将部分视图返回到该操作,因此我需要显式声明我要返回的部分视图,因为一旦partialView结果冒泡到原始操作,它调用了错误的部分视图。
所以我需要:
1 | return PartialView("SuccessMessage", viewModel); |
这就成功了。
我猜你在你的
1 2 3 4 5 | public ActionResult CouponCampaignTable() { CouponCampaign model = ... return PartialView(model); } |
当然,
1 2 | @model CouponCampaign ... |
或者,问题可能在于您对
1 2 3 4 5 | public ActionResult Add() { SystemMessage model = ... return PartialView(model); } |