我正试图从一个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。 它工作正常,所以这意味着脚本没有正确设置。
因为你正在调用一个动作方法,该方法正在返回一个 json
对象,你可以使用 jQuery.getJSON() 方法。
<script type="text/javascript">
function Test() {
$.getJSON(
'@this.Url.Action("GetData", "Report")',
function (data) {
alert(data);
}
});
};
</script>
你应该试试。
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);
}
});
}
改为使用Razor语法,这样这段代码就可以和RazorMVC3一起使用了。
你在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:http: /jsaction.codeplex.com.
我们可以很容易地使用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方法。
接收响应 是接收控制器方法的响应或返回值的回调函数。
这里我们使用了JSON,因为我们不能使用C#类对象。
所以我们将controller方法中的结果(arr)转换为JSON对象,如下所示。
Json(arr , JsonRequestBehavior.AllowGet)。
并返回该Json对象。
现在在Javascript JQuery的回调函数中,我们可以利用这个结果的JSON对象,并据此在UI上显示响应数据。
更多细节 点击这里