我的对话框使用Facebox。我在这些Facebox之一中创建了一个表单。当通过ajax $.post()
提交创建表单时,该操作将返回带有成功消息的局部视图,以替换面板中的视图。我遇到的问题是firebug,当ajax调用完成时报告500服务器错误:
传递到字典中的模型项的类型为“ Models.ViewModels.SystemMessage”,但是此字典需要模型项的类型为“ Models.CouponCampaign”。
这是成功消息的局部视图:
@model Redeemupon.Models.ViewModels.SystemMessage
<div class="successMessage" title="Success">
<img src="/Content/Images/Positive_48x48.png" alt=":-)"/>
@Html.Raw(Model.Message)
</div>
这是传递此局部视图的代码段。
var viewModel = new SystemMessage()
{
Message = message
};
return PartialView(viewModel);
最后,ajax调用
$("#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中的原始视图使用
Models.CouponCampaign
,第二个视图是否可能试图继承该模型?应该用自己的viewmodel替换为新视图。这是来自我的globals.asax的路由规则:
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
);
}
最佳答案
我猜您在CouponCampaignTable
动作中将错误的模型传递给视图:
public ActionResult CouponCampaignTable()
{
CouponCampaign model = ...
return PartialView(model);
}
当然,
CouponCampaignTable.cshtml
部分应严格键入CouponCampaign
:@model CouponCampaign
...
也许问题出在您对
$.post
控制器动作的初始Add
请求:public ActionResult Add()
{
SystemMessage model = ...
return PartialView(model);
}