2014-06-07 96 views
0

我有一個主控制器,其視圖有一個按鈕。我想調用一個名爲SearchSpace的控制器在按鈕單擊上。從控制器的視圖調用不同的控制器動作雖然javascript

查看:

<script type="text/javascript"> 

    var data = { "id": "1" } 

    function search() { 
     alert("hello" + JSON.stringify(data)); 
      $.ajax({ 
      url: '/SearchSpace/searchSpace', 
      type: 'POST', 
      dataType: "json", 
      contentType: 'application/json', 
      data: JSON.stringify(data), 
      success: function (returnPayload) { 
       console && console.log("request succeeded"); 
      }, 
      error: function (xhr, ajaxOptions, thrownError) { 
       console && console.log("request failed"); 
      } 

     }); 

    } 
</script> 

控制器

[HttpGet] 
    public ActionResult searchSpace() 
    { 
return View(); 
    } 

    [HttpPost] 
    public ActionResult searchSpace(SearchSpace search) 
    { 
     //code 
      return View(); 
    } 

路由配置

  public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

警報調用,但它是不動的,以SearchSpace控制器.. 請幫助我。

+0

你是什麼意思「不移動」?你的錯誤函數被調用了嗎? –

+0

沒有錯誤消息顯示。移動含義調用該控制器操作 – Wasfa

+0

您嘗試過ajax調用後的警報嗎? –

回答

1

試試這個

 <button id="click"><a href="/Home/About">Click me</a> 
     </button> 
+0

試過這個

+0

我試過,上面的代碼,它創建按鈕,一旦你點擊它將重定向你關於我們的頁面,如果你通過根標誌你需要傳遞頁面的擴展也。更好地使用控制器/視圖名稱 – Friyank

0

問題是數據類型jQuery.ajax()是期望的,因爲您分配dataType財產與json。從jQuery API documentation

的數據類型(默認:智能猜測(XML,JSON,腳本或HTML)) 類型:String 的類型,你期望從服務器返回的數據。如果沒有指定,jQuery將嘗試根據響應的MIME類型推斷它(XML MIME類型將生成XML,在1.4中JSON將生成一個JavaScript對象,在1.4腳本中將執行該腳本,而其他任何東西都將作爲字符串返回)。可用類型(以及作爲成功回調的第一個參數傳遞的結果)爲:

...「json」:將響應評估爲JSON並返回JavaScript對象。 JSON數據嚴格分析;任何格式不正確的JSON都會被拒絕並引發解析錯誤。從jQuery 1.9開始,一個空的響應也被拒絕;服務器應該返回null或{}的響應。 (有關正確的JSON格式的詳細信息,請參閱json.org。)

至少有2種方式來解決這個問題:

首先,省略dataType屬性:

$.ajax({ 
    url: '/SearchSpace/searchSpace', 
    type: 'POST', 
    contentType: 'application/json', 
    //dataType: "json", << delete this line or comment it 
    data: JSON.stringify(data), 
    success: function (data) { 
     console && console.log(data); 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     console && console.log("request failed"); 
    } 
}); 

第二,從響應中返回JSON類型數據:

[HttpPost] 
public ActionResult searchSpace(int? id) 
{ 
    if (Request.IsAjaxRequest() && id != null) 
    { 
     return Json(new { data = "Requested data is: " + id.ToString() }); 
    } 

    return View(); 
} 
+0

我嘗試了兩種方法,但無法調用控制器操作方法 – Wasfa

+0

@Wasfa您是否嘗試調試代碼?將制動點加入到動作方法中,然後查看是否在點擊按鈕後調用該動作方法。 – Givi

相關問題