1

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

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

锚标记:

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

div标签:

<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 上失败。

4

2 回答 2

0

Html.ActionLink 只不过是一个实用程序类,它检查应用程序中配置的路由,并打印一个链接标签,其 URL 对应于该特定操作/控制器/参数。

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

<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,后面没有别的,推荐使用它们,但不是必需的。

于 2013-06-05T16:25:38.647 回答
0

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

这就是我所做的:

锚标记:

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

div标签:

      <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>

虽然我解决了渲染部分视图的问题,但仍然想知道为什么将 url 更改为“#”有效(可能不再有 url 可以导航到......)

于 2013-06-06T05:29:08.080 回答