我的index.cshtml中有一个div元素,ID为#myresults,我试图通过调用mvc控制器方法通过jquery.load方法加载数据。但我无法获得正确的语法。
我也将自定义对象作为参数传递。
var mycustomObject = {
obj1:value1,
obj2:value2,
..
}
以下不起作用...(我已尝试过其他组合......我找不到服务器错误)
$("#myresults").load ('@Url.Action("MyActionMethod","Home")',mycustomObject);
以下工作
$("#myresults").load('/Home/MyActionMethod', mycustomObject);
虽然最后一个语句有效,但它仅适用于localhost。
使用Url.Action进行jquery加载的正确语法是什么?
答案 0 :(得分:2)
@Url.Action()
将始终生成正确的URL,因此如果您获得404,则表示此代码位于外部脚本文件中。 Razor代码不会在外部脚本中执行,因此您的网址将成为文本“@ Url.Action(”MyActionMethod“,”Home“)”。
解决此问题的选项包括
var url =
'@Url.Action("MyActionMethod","Home")';
在外部文件中使用
$("#myresults").load(url, mycustomObject);
例如,将url分配给元素作为data-*
属性
<button type="button" id="loadSomething" data-url="@Url.Action("MyActionMethod","Home")">...</button>
,以及
外部文件
$('#loadSomething').click(function() {
var url = $(this).data('url');
$("#myresults").load(url, mycustomObject);
});
答案 1 :(得分:1)
将div元素定义为:
<div id="myresults" onload="loadMyData();"></div>
在你的方法中进行ajax调用:
<script type="text/javascript">
function loadMyData() {
$.ajax({
cache: false,
url: '@Html.Raw(Url.Action(MyActionMethod","Home"))',
data: { obj1:value1, obj2:value2 },
dataType: "json",
type: 'post',
success: function (result) {
if (result.success) {
$('#myresults').html(result.data);
}
else {
alert("Failed to load data!");
}
}
});
}
</script>