jquery加载对控制器的调用并填充div元素

时间:2016-10-20 16:27:09

标签: javascript jquery asp.net-mvc

我的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加载的正确语法是什么?

2 个答案:

答案 0 :(得分:2)

@Url.Action()将始终生成正确的URL,因此如果您获得404,则表示此代码位于外部脚本文件中。 Razor代码不会在外部脚本中执行,因此您的网址将成为文本“@ Url.Action(”MyActionMethod“,”Home“)”。

解决此问题的选项包括

  1. 将代码移动到视图或其布局中
  2. 在视图中声明一个全局变量 - var url = '@Url.Action("MyActionMethod","Home")';在外部文件中使用 $("#myresults").load(url, mycustomObject);
  3. 例如,将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>