簡體   English   中英

通過javascript從控制器視圖調用不同的Controller動作

[英]Call a different Controller action from view of a controller though javascript

我有一個Home控制器,其視圖有一個按鈕。我想在按鈕單擊時調用一個名為SearchSpace的控制器。

查看:

  <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 Controller。請幫助我。

嘗試這個

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

問題在於預期的jQuery.ajax()數據類型,因為您為json分配了dataType屬性。 jQuery API文檔中

dataType(默認值:Intelligent Guess(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。)

至少有兩種方法可以解決此問題:

首先,省略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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM