2011-07-18 24 views
2

我使用Facebox作为我的对话框。我在这些Facebox中有一个创建表单。当通过ajax $.post()提交创建表单时,该操作将返回一个带有成功消息的部分视图,以替换facebox中的视图。我遇到的问题是Firebug是报告一个500服务器错误当Ajax调用完成后说:MVC Jquery Ajax调用返回声明它通过了错误模型的视图

传递到字典的模型项的类型为“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); 

最后,这是载入facebox 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; 
    }); 

原来的视图使用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 
     ); 



    } 
+0

您必须向我们展示路由规则。 –

+0

@Gallen:显示您在此处执行的操作的“正确”方式是将解决方案作为答案添加到问题中,然后接受该答案。 (如果您可以接受自己的答案,则会有延迟,因此您必须在几天后回到此问题以勾选对号。) –

回答

0

编辑

SO,因为我是从另一个动作调用SuccessMessage(字符串消息),并返回部分对于那个动作来说,我需要显式声明我想要返回哪个局部视图,因为一旦PartialViewResult冒泡到原始动作,它就会调用错误的局部视图。

所以我需要:

return PartialView("SuccessMessage", viewModel); 

而且奏效了。

0

我猜你是传递一个错误的模型,视图在CouponCampaignTable行动:

public ActionResult CouponCampaignTable() 
{ 
    CouponCampaign model = ... 
    return PartialView(model); 
} 

,当然还有CouponCampaignTable.cshtml部分应该强类型为CouponCampaign

@model CouponCampaign 
... 

或者,也许这个问题是你最初的$.post请求Add控制器动作:

public ActionResult Add() 
{ 
    SystemMessage model = ... 
    return PartialView(model); 
} 
+0

不,它没有那样 - 但谢谢你的回复。我只是想通了,我会相应地更新我的帖子。 – Gallen

+0

@Gallen,很不幸,从你提供的信息来看,这是我能想到的最好的。您没有显示任何控制器操作或部分视图名称,也没有显示它们是如何调用的。 –

+0

我的道歉,下次我会更全面。 – Gallen

相关问题