表单请求能返回视图但是ajax不行,MVC Jquery Ajax调用返回一个视图,声称它传递了错误的模型...

我正在使用我的对话框。我在其中一个面板框中有一个创建表单。当通过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);

}

不,不是那样的-不过谢谢你的回复。我刚刚知道了,我会相应地更新我的帖子。

@加伦,很不幸,从你提供的信息来看,这是我能想到的最好的方法。您没有显示任何控制器操作、局部视图名称以及如何调用它们。

对不起,下次我会更全面的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值