【问题标题】:MVC3 Partial View - Is it better Ajax.BeginForm or Ajax.ActionLink?MVC3 部分视图 - Ajax.BeginForm 还是 Ajax.ActionLink 更好?
【发布时间】:2011-03-29 20:50:47
【问题描述】:

我有一个局部视图,里面有两个相反的 ActionLink:

    <div id="divStatus>  
    @if (IsAuthenticated) 
        Html.ActionLink("Say Bye", "ProcBye", "Account")
    else 
        Html.ActionLink("Say Hi", "ProcHi", "Account")
    </div>

每个 Action 链接调用 Controller 上的不同方法。

我听说我应该使用 Ajax.BeginForm,但我仍然不清楚如何使用它? 我的理解是我需要一个 &lt;div id="divStatus"&gt; 来显示结果,但在我的情况下......结果是部分视图本身。

问题:我如何确保让控制器只是刷新调用的部分视图?

我应该在 PV 之外添加一个 div 吗?
我是否应该在 PV 环绕 '@if (IsAuthenticate)' 调用中添加 div 内
在这种情况下使用 Ajax.BeginFormAjax.ActionLink 更好吗?

代码:控制器的代码应该是什么样的?

    public ActionResult ProcBye()
    {
        // do something on the server
        // set IsAuthenticated = false;

        return PartialView("_myPV");
    }

没有涉及验证,没有需要填充的“外部”div,只需简单地刷新 PV,与 PV 所在的页面无关。

任何帮助将不胜感激!!!

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    就我个人而言,我两者都不会使用。我会使用一个单独的 javascript 文件,在其中我会 AJAXify 链接:

    $(function() {
        $('.mylink').click(function() {
            $('#resultdiv').load(this.href);
            return false;
        });
    });
    

    其中 resultdiv 将是一个 div,它将使用控制器操作返回的部分结果进行更新:

    <div id="resultdiv"></div>
    

    你只需要把mylink类:

    @if (IsAuthenticated) 
    {
        @Html.ActionLink("Say Bye", "ProcBye", "Account", null, new { @class = "mylink" })
    }
    else 
    {
        @Html.ActionLink("Say Hi", "ProcHi", "Account", null, new { @class = "mylink" })
    }
    

    如果您愿意,也可以使用Ajax.ActionLink

    @if (IsAuthenticated) 
    {
        @Ajax.ActionLink("Say Bye", "ProcBye", "Account", new AjaxOptions { UpdateTargetId = "resultdiv" })
    }
    else 
    {
        @Ajax.ActionLink("Say Hi", "ProcHi", "Account", new AjaxOptions { UpdateTargetId = "resultdiv" })
    }
    

    在这种情况下不要忘记包含 jquery unobtrusive ajax 脚本:

    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
    

    【讨论】:

    • 我尝试了您的第一种方法。 1) 我添加了对不显眼的 ajax 脚本的引用 2) 我添加了脚本函数调用(作为 PV 本身顶部的
    • @Filu,那是因为我在帖子中犯了一个错误,并且使用了错误的 Html.ActionLink 帮助程序重载。在我指定为空的控制器名称之后,还有另一个参数代表routeValues。我已经更新了我的答案来解决这个问题。此外,您的脚本标记应如下所示:&lt;script type="text/javascript"&gt;, no language 属性。
    猜你喜欢
    • 1970-01-01
    • 2012-07-19
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2013-01-25
    • 1970-01-01
    • 2013-02-20
    相关资源
    最近更新 更多