mvc3 html.actionlink无法使用$ .ajax()呈现局部视图

时间:2013-06-05 16:14:07

标签: asp.net-mvc-3

刚进入mvc世界并在渲染时遇到一些奇怪的问题 使用jquery进行部分视图。

我正在使用mvc3,这是我到目前为止所做的:

锚标记:

@Html.ActionLink("Click-Me", null, null, null, new { onclick = "javascript:FillData();",id=2 })

div tag:

<div id="FillRecords"></div>

功能:

    <script>

    function FillData() {

       var val1 = $(this).attr('id');
    $.ajax({

        url: "/Dummy/Edit",
        datatype: "html",
        type:"Post",
          data:{id:val1.toString()},
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        success: function (mydata) {
            $("#FillRecords").empty().append(mydata);
        },

        error: function (errorStatus,errorType,error) {
            alert(error);
        }

    });
}

</script>

我只想点击时在“DummyController”中渲染“编辑”局部视图 锚标签。此外,如果我使用简单的锚标签而不是html.actionlink 这个工人很好。

有人知道如何使用actionlink吗? 当然,我错过了一些愚蠢的事情,或者这是否可能?

请不要建议我使用Ajax.Actionlink因为 这也很好,但我想知道为什么它失败了html.actionlink。

2 个答案:

答案 0 :(得分:0)

Html.ActionLink只不过是一个实用程序类,用于检查应用程序中配置的路由,并打印一个链接标记,其URL与该特定操作/ controller / params对应。

简单来说:它背后没有魔法,你也可以写

<a href="@Url.Action(...)">Text</a>

或直接写

<a href="/Controller/Action/id">Text</a>

使用Url.Action或Html.ActionLink的主要优点是,如果您更改应用中的路线,则无需担心网页中的链接。

这意味着,对于你想要的,使用Html.ActionLink是没有意义的,你应该写一下

<a href="#" id="clickme">Click-Me</a>

并在链接中添加jQuery事件。如果使用最新版本的jQuery:

$(document).on('click', '#clickme', function() {
    $.ajax(...);
});

关于MVC.Net的好处是你直接使用HTML / JS / CSS。从字面上看,辅助方法可以帮助您。但最后,他们只是编写HTML,他们背后没有任何其他内容,并且建议使用它们,但不是必需的。

答案 1 :(得分:0)

在这里和那里稍微调整一下,我得到了我的解决方案。渲染我的局部视图 使用html.action,我只需将锚标记的URL更改为“#”,因为使用firebug我可以看到它有效。因此,对于使用Html.actionlink呈现部分视图问题的任何人,只需将url更改为生成的锚标记的“#”。

这就是我所做的:

锚标记:

       <a href="@Url.Action("Edit","Dummy")" id="clickme">ClickMe</a>

div tag:

      <div id="filldata"></div>

功能:

      <script>

$("#clickme").click(function () {

    $(this).attr("href", "#");

    $.ajax({

        url: "/Dummy/Edit",
        success: function (mydata) {

            $("#filldata").empty().append(mydata);

        },
        error: function (error) {

            alert(error);

        }

    });

});

</script>

Althogh我解决了渲染局部视图的问题,但仍然想知道为什么要更改网址 “#”有效(可能它不再有网址导航到....)