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

Javascript 使用jquery从.cshtml页面调用控制器操作,javascript,jquery,asp.net-mvc-3,jquery-ui,razor,Javascript,Jquery,Asp.net Mvc 3,Jquery Ui,Razor,我试图从jQueryUI对话框调用控制器操作。 我目前拥有的是: .html("<p><textarea name=\"TextMessage\" id=\"textItems\" rows=\"10\" cols=\"72\" /><br /><br /><input type=\"button\" style=\"float:right;\" id=\"submitData\" onclick=\"Test()\" value=\"Sub

我试图从jQueryUI对话框调用控制器操作。 我目前拥有的是:

.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>");
我想知道我是否做错了什么,我正试图让这项工作,但没有任何成功。当我试图通过直接启动控制器时,它工作正常,因此这意味着脚本设置不正确。

您应该尝试:

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一起使用。

您应该尝试:

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一起使用。

因为您正在调用返回
json
对象的操作方法,所以您可以使用该方法


功能测试(){
$.getJSON(
@this.Url.Action(“GetData”、“Report”),
功能(数据){
警报(数据);
}
});
};

因为您正在调用返回
json
对象的操作方法,所以可以使用该方法


功能测试(){
$.getJSON(
@this.Url.Action(“GetData”、“Report”),
功能(数据){
警报(数据);
}
});
};

您正在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);
      }
    }
  );
};

您正在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);
      }
    }
  );
};
您也可以尝试以下操作:

您也可以尝试jsaction:

我们可以很容易地使用Javascript/Jquery调用控制器方法,如下所示:

假设下面是要调用的控制器方法,返回一些类对象的数组。让班级成为“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);

    }
以下是复杂类型(类)

现在轮到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);
        }
    }
}
函数调用控制器方法(值1、值2){
var strmethodur='@Url.Action(“单击子菜单”,“主页”)?param1=value1¶m2=value2'
$.getJSON(strmethodur,receiveResponse);
}
功能接收响应(响应){
if(响应!=null){
对于(变量i=0;i
在上面的Jquery函数'callControllerMethod'中,我们开发了控制器方法url,并将其放入名为'strmethodur'的变量中,然后调用Jquery API的getJSON方法

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

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

直接转换到javascript函数中,因此我们将controller方法中的结果(arr)转换为JSON对象,如下所示:

Json(arr,JsonRequestBehavior.AllowGet)

并返回该Json对象

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


有关更多详细信息,我们可以使用Javascript/Jquery非常轻松地调用控制器方法,如下所示:

假设下面是要调用的控制器方法,返回一些类对象的数组。让班级成为“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);

    }
以下是复杂类型(类)

现在轮到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);
        }
    }
}
函数调用控制器方法(值1、值2){
var strmethodur='@Url.Action(“单击子菜单”,“主页”)?param1=value1¶m2=value2'
$.getJSON(strmethodur,receiveResponse);
}
功能接收响应(响应){
if(响应!=null){
对于(变量i=0;i
在上面的Jquery函数'callControllerMethod'中,我们开发了控制器方法url,并将其放入名为'strmethodur'的变量中,然后调用Jquery API的getJSON方法

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

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

直接转换到javascript函数中,因此我们将controller方法中的结果(arr)转换为JSON对象,如下所示:

Json(arr,JsonRequestBehavior.AllowGet)

并返回该Json对象

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


有关更多详细信息

如果要返回JSON,则需要设置数据类型:“JSON”属性。您还应该包括和“error:function(…”在您的ajax调用中。似乎您缺少了
Test
函数的右括号,但这可能只是一个输入错误。@JackieChiles我更新了Test函数,看看它是否正常,没有做任何事情well@rontornambe能不能给我举个例子,这对我很有帮助。谢谢advance@Laziale:当你说你能要“直接启动控制器”,您是指(在浏览器中)导航到该URL吗,或者您的意思是,如果您将该URL设置为AJAX调用的
URL
参数,它就会起作用吗?顺便说一句,通过编辑,您现在在
Test
的右括号后有一个尾随分号。如果您返回JSON,您需要设置数据类型:“JSON”属性。您还应该包括和“error:function(…”在您的ajax调用中。您似乎缺少
Test
函数的右括号,但这可能只是一个输入错误。@JackieChiles我更新了