【问题标题】:mvc3 html.actionlink unable to render partial view using $.ajax()mvc3 html.actionlink 无法使用 $.ajax() 呈现部分视图
【发布时间】:2013-06-05 16:14:06
【问题描述】:

刚进入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 上失败了。

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

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

    【讨论】:

    • 如果我还需要将某些值传递给控制器​​,那么我将如何做到这一点?考虑编辑记录的情况,其中每个 html.actionlink 都有一些与其关联的值(可能是记录 ID)路由值,我们需要使用这个 id 填充一些局部视图,最后将它渲染到某个视图
    • 这取决于你想做什么。您只是在 $.ajax 调用中调用 URL,但您可以执行 $('form').serialize(),并将表单中的所有字段发送到服务器。另一种选择是使用 @Url.Action 帮助程序创建一个链接,如我的示例中那样捕获事件,并使用 $(this).attr('href') 获取要发布到的 URL 的值。 .
    • 感谢 salgiza 的回复............我还对我的代码进行了一些更改以将数据传递给 filldata 函数,但我仍然无法将我的部分视图呈现给对应的 div .....你能检查一下.....我还缺少什么吗??
    【解决方案2】:

    在这里和那里稍作调整,我得到了我的解决方案。渲染我的局部视图 使用 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 ......)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      相关资源
      最近更新 更多