我正在尝试从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
答案 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);
}
});
}
更改为使用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 ¶m2=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