使用jquery从.cshtml页面调用控制器操作

时间:2012-02-17 15:16:59

标签: javascript jquery asp.net-mvc-3 jquery-ui razor

我正在尝试从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:1322/Report/GetData直接启动控制器时,它工作正常,这意味着脚本设置不正确。 我感谢每一个帮助。 在此先感谢Laziale

5 个答案:

答案 0 :(得分:2)

你应该尝试:

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

MVC会在寻找控制器时自动将“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语法,以便此代码可与Razor / MVC3一起使用。

答案 1 :(得分: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);
      }
    }
  );
};

答案 2 :(得分:0)

因为您正在调用返回json对象的操作方法,所以您可以使用jQuery.getJSON()方法。

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

答案 3 :(得分:0)

您也可以尝试jsaction: http://jsaction.codeplex.com

答案 4 :(得分: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方法。

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

这里我们使用了JSON,因为我们无法使用C#类对象

直接进入javascript函数,所以我们将控制器方法中的结果(arr)转换为JSON对象,如下所示:

Json(arr,JsonRequestBehavior.AllowGet);

并返回那个Json对象。

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

详细信息 click here