我的对话框使用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);
}

09-16 12:12