2012-08-17 168 views
1

我有一個視圖,當我通過代碼時,我沒有被調用,我看到它到達控制器中的操作並返回視圖,但它不加載視圖,它只是停留在當前頁。查看不渲染MVC 4

當在特定頁面上單擊某個按鈕時,會調用ajax帖子調用下一個不加載的頁面。

我的位指示行動看起來是這樣的:

public ActionResult Comparison(int[] y) 
     { 
      CostModel.Getsuff(y);   

      return View(CostModel); 
     } 

我的路線圖是這樣的:

routes.MapRoute(
     name: "Compare", 
     url: "Category/Comparison/{*xxxx}", 
     defaults: new { Controller = "Category", Action = "Comparison" } 
     ).RouteHandler 

= new CategoriesRouteHandler(); 



public class CategoriesRouteHandler : IRouteHandler 
     { 
      public IHttpHandler GetHttpHandler(RequestContext requestContext) 
      { 
       IRouteHandler handler = new MvcRouteHandler(); 
       var vals = requestContext.RouteData.Values; 
       var list = vals["xxxx"].ToString().Split(','); 
       int[] y= new int[list.Length]; 
       for (int i=0; i < list.Length; i++) 
        int.TryParse(list[i].ToString(),out y[i]); 

       vals.Add("y", y); 
       return handler.GetHttpHandler(requestContext); 
      } 
     } 

我的AJAX

$.ajax({ 
     type: "POST", 
     url: '@Url.Action("Comparison", "Category", new { Categories = "PLACEHOLDER"})'.replace('PLACEHOLDER', arr), 
     dataType: "json", 
     traditional: true, 
     success: function(msg){alert(msg)} 
    }); 

正如我前面提到的,當我跟蹤它,它執行ajax調用罰款,並擊中控制器上的行動,它只是不啓動視圖。我認爲這可能與該地區沒有在任何地方定義的事實有關?所以也許它扔掉了,在MVC 4中無法看到指定不同區域的任何地方,但我是MVC的新手。任何幫助將不勝感激。

回答

4

正如我前面提到的,當我跟蹤它,它執行Ajax調用 罰款和命中控制器上的行動,它只是不啓動 視圖。

這就是AJAX =>留在同一頁面上的全部觀點。如果你想替換當前頁面,請不要使用任何AJAX。使用正常的Html.ActionLink

如果你的控制器操作只返回一個PartialView,你想只刷新你的頁面的一部分,你可以做的是,在success回調:

$.ajax({ 
    type: "POST", 
    url: '@Url.Action("Comparison", "Category", new { Categories = "PLACEHOLDER"})'.replace('PLACEHOLDER', arr), 
    traditional: true, 
    success: function(result) { 
     $('#someIdToRefresh').html(result); 
    } 
}); 

還要注意,我已刪除dataType: 'json'因爲您的控制器操作不會返回任何JSON。它將返回text/html

+0

謝謝你的快速反應,因爲你可能已經猜到我對ajax也很陌生,非常感謝讓我的週末:) – user329540 2012-08-17 13:30:32

1

從您的操作方法中,您返回HTML(呈現的視圖),而您的Ajax調用期望JSON作爲響應的格式。

我相信當響應到達時會拋出異常。