我正在使用我的对话框。我在其中一个面板框中有一个创建表单。当通过ajax $.post()提交create表单时,该操作将返回一个带有成功消息的部分视图,以替换facebox中的视图。我遇到的问题是Firebug在Ajax调用完成时报告了一个500服务器错误,并说:
The model item passed into the dictionary is of type 'Models.ViewModels.SystemMessage', but this dictionary requires a model item of type 'Models.CouponCampaign'.
以下是成功消息的部分视图:
@model Redeemupon.Models.ViewModels.SystemMessage
@Html.Raw(Model.Message)
下面是传递这个局部视图的片段。
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,第二个视图是否可能试图继承该模型?它应该被新的视图替换,用它自己的视图模型。
以下是我的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
);
}
您必须向我们展示路由规则。
@加伦:展示你在这里所做的"正确"的方式是将你的解决方案作为答案添加到问题中,然后接受那个答案。(在你可以接受自己的答案的时间上有一个延迟,所以你必须在几天内回到这个问题上来勾选…)
编辑
因此,由于我从另一个操作调用SuccessMessage(字符串消息),并将部分视图返回到该操作,因此我需要显式声明我要返回的部分视图,因为一旦partialView结果冒泡到原始操作,它调用了错误的部分视图。
所以我需要:
return PartialView("SuccessMessage", viewModel);
这就成功了。
我猜你在你的CouponCampaignTable动作中给视图传递了一个错误的模型:
public ActionResult CouponCampaignTable()
{
CouponCampaign model = ...
return PartialView(model);
}
当然,CouponCampaignTable.cshtml部分应强类型化为CouponCampaign部分:
@model CouponCampaign
...
或者,问题可能在于您对Add控制器操作的初始$.post请求:
public ActionResult Add()
{
SystemMessage model = ...
return PartialView(model);
}
不,不是那样的-不过谢谢你的回复。我刚刚知道了,我会相应地更新我的帖子。
@加伦,很不幸,从你提供的信息来看,这是我能想到的最好的方法。您没有显示任何控制器操作、局部视图名称以及如何调用它们。
对不起,下次我会更全面的。