在.cshtml页面中使用jquery调用控制器动作。

问题描述 投票:0回答:5

我正试图从一个jquery UI对话框中调用一个控制器动作。我目前的情况是这样的。

.html("<p><textarea name=\"TextMessage\" id=\"textItems\" rows=\"10\" cols=\"72\" /><br /><br /><input type=\"button\" style=\"float:right;\" id=\"submitData\" onclick=\"Test()\" value=\"Submit\" /></p>");

我用来调用控制器动作的脚本是这样的。

<script type="text/javascript">
    function Test() {
        $ajax({
            url: '<%= Url.Action("GetData", "Report") %>',
            success: function (data) {
                alert(data);
            }
        });
    };
</script>

而控制器的动作是这样的

[HttpGet]
        public JsonResult GetData()
        {
            return Json("success", JsonRequestBehavior.AllowGet);
        }

我想知道我是否做错了什么,我试图让它工作,但没有成功。当我尝试直接通过以下方式启动控制器时 http:/localhost:1322ReportGetData。 它工作正常,所以这意味着脚本没有正确设置。

javascript jquery asp.net-mvc-3 jquery-ui razor
5个回答
0
投票

因为你正在调用一个动作方法,该方法正在返回一个 json 对象,你可以使用 jQuery.getJSON() 方法。

<script type="text/javascript">
    function Test() {
        $.getJSON(
            '@this.Url.Action("GetData", "Report")',
            function (data) {
                alert(data);
            }
        });
    };
</script>

2
投票

你应该试试。

url:'@Url.Action("GetData", "Report")'

MVC在寻找controller的时候,会自动在第二个参数的末尾加上 "Controller"。

编辑一下

这段代码也许可以用。

function Test() {
    $.ajax({
        type: "GET",
        dataType: "json",
        url: '@Url.Action("GetData", "Report")',
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            alert(data);
        },
        error: function(xhr, status, error) {
            alert(error);
        }
    });
}

编辑2:

改为使用Razor语法,这样这段代码就可以和RazorMVC3一起使用了。


1
投票

你在Url.Action上使用的是MVC-2语法。这应该可以工作。

function Test() {
  $.ajax(
    {
      url: '@Url.Action("GetData", "Report")',
      dataType: 'json',
      success: function (data) {
        alert(data);
      },
      error: function (x, err, desc) {
        alert(desc);
      }
    }
  );
};

0
投票

你也可以试试jsaction:http: /jsaction.codeplex.com.


0
投票

我们可以很容易地使用Javascript Jquery调用Controller方法,如下所示。

假设下面是要调用的Controller方法,返回一个由一些类对象组成的数组。让这个类是'A'

public JsonResult SubMenu_Click(string param1, string param2)

    {
       A[] arr = null;
        try
        {
            Processing...
           Get Result and fill arr.

        }
        catch { }


        return Json(arr , JsonRequestBehavior.AllowGet);

    }

以下是复合类型(类

public class A
 {

  public string property1 {get ; set ;}

  public string property2 {get ; set ;}

}

现在轮到用JQUERY调用上述控制器方法。以下是调用控制器方法的Jquery函数。

function callControllerMethod(value1 , value2) {
    var strMethodUrl = '@Url.Action("SubMenu_Click", "Home")?param1=value1  &param2=value2'
    $.getJSON(strMethodUrl, receieveResponse);
}


function receieveResponse(response) {

    if (response != null) {
        for (var i = 0; i < response.length; i++) {
           alert(response[i].property1);
        }
    }
}

在上述Jquery函数中 'callControllerMethod' 我们开发控制器方法的url,并将其放在一个名为'strMehodUrl'的变量中,然后调用Jquery API的getJSON方法。

接收响应 是接收控制器方法的响应或返回值的回调函数。

这里我们使用了JSON,因为我们不能使用C#类对象。

所以我们将controller方法中的结果(arr)转换为JSON对象,如下所示。

Json(arr , JsonRequestBehavior.AllowGet)。

并返回该Json对象。

现在在Javascript JQuery的回调函数中,我们可以利用这个结果的JSON对象,并据此在UI上显示响应数据。

更多细节 点击这里

© www.soinside.com 2019 - 2024. All rights reserved.