MVCjQueryAjax调用返回一个声称传递了错误模型的视图
我正在使用Facebox作为对话框。我在其中一个面板中创建了一个表单。当通过ajaxMVCjQueryAjax调用返回一个声称传递了错误模型的视图,jquery,ajax,asp.net-mvc-3,razor,Jquery,Ajax,Asp.net Mvc 3,Razor,我正在使用Facebox作为对话框。我在其中一个面板中创建了一个表单。当通过ajax$.post()提交创建表单时,操作将返回一个局部视图,并显示一条成功消息,以替换facebox中的视图。我遇到的问题是firebug在ajax调用完成时报告了一个500服务器错误,并说: 传递到字典中的模型项的类型为“Models.ViewModels.SystemMessage”,但此字典需要类型为“Models.CouponCampaign”的模型项 以下是成功消息的部分视图: @model Redeemu
$.post()
提交创建表单时,操作将返回一个局部视图,并显示一条成功消息,以替换facebox中的视图。我遇到的问题是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>
最后是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中的原始视图使用模型。CouponCampaign
第二个视图是否可能尝试继承该模型?它应该被新视图替换,具有自己的viewmodel
以下是my 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
);
}
我猜您在
couponCampaintable
操作中将错误的模型传递给视图:
public ActionResult CouponCampaignTable()
{
CouponCampaign model = ...
return PartialView(model);
}
当然,couponcamptable.cshtml
partial应该是强类型的CouponCampaign
:
@model CouponCampaign
...
或者问题可能出在您的初始$上。将请求发布到添加控制器操作:
public ActionResult Add()
{
SystemMessage model = ...
return PartialView(model);
}
我猜您在couponCampaintable
操作中将错误的模型传递给视图:
public ActionResult CouponCampaignTable()
{
CouponCampaign model = ...
return PartialView(model);
}
当然,couponcamptable.cshtml
partial应该是强类型的CouponCampaign
:
@model CouponCampaign
...
或者问题可能出在您的初始$上。将请求发布到添加控制器操作:
public ActionResult Add()
{
SystemMessage model = ...
return PartialView(model);
}
编辑
因此,由于我从另一个操作调用SuccessMessage(字符串消息),并将部分视图返回到该操作,因此我需要显式声明我要返回的部分视图,因为一旦PartialViewResult冒泡到原始操作,它调用了错误的部分视图
var viewModel = new SystemMessage()
{
Message = message
};
return PartialView(viewModel);
所以我需要:
return PartialView("SuccessMessage", viewModel);
这就成功了。编辑
因此,由于我从另一个操作调用SuccessMessage(字符串消息),并将部分视图返回到该操作,因此我需要显式声明我要返回的部分视图,因为一旦PartialViewResult冒泡到原始操作,它调用了错误的部分视图
var viewModel = new SystemMessage()
{
Message = message
};
return PartialView(viewModel);
所以我需要:
return PartialView("SuccessMessage", viewModel);
这就成功了。你必须向我们展示路由规则。@Gallen:展示你在这里所做的事情的“正确”方式是将你的解决方案作为答案添加到问题中,然后接受这个答案。(你可以接受自己的答案的时间有一个延迟,因此你必须在几天后回到这个问题,勾选复选标记…)你必须向我们展示路由规则。@Gallen:显示你在这里所做的事情的“正确”方式是将你的解决方案添加到问题中作为答案,然后接受该答案。(你可以接受自己的答案的时间有点延迟,所以你必须在几天后再回到这个问题上打勾……)不,不是这样的,但是谢谢你的回答。我刚想出来,我会相应地更新我的帖子。@Gallen,很不幸,从你提供的信息来看,这是我能想到的最好的了。您没有显示任何控制器操作或部分视图名称,也没有显示它们的名称。很抱歉,我下次会更全面。不,不是这样的-但是感谢您的回复。我刚想出来,我会相应地更新我的帖子。@Gallen,很不幸,从你提供的信息来看,这是我能想到的最好的了。您没有显示任何控制器操作或部分视图名称,也没有显示它们的名称。很抱歉,我下次会更全面。