Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MVCjQueryAjax调用返回一个声称传递了错误模型的视图_Jquery_Ajax_Asp.net Mvc 3_Razor - Fatal编程技术网

MVCjQueryAjax调用返回一个声称传递了错误模型的视图

MVCjQueryAjax调用返回一个声称传递了错误模型的视图,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

我正在使用Facebox作为对话框。我在其中一个面板中创建了一个表单。当通过ajax
$.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,很不幸,从你提供的信息来看,这是我能想到的最好的了。您没有显示任何控制器操作或部分视图名称,也没有显示它们的名称。很抱歉,我下次会更全面。