MVC3部分视图 - 它是更好的Ajax.BeginForm还是Ajax.ActionLink?

时间:2011-03-29 20:50:48

标签: asp.net-mvc-3

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

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

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

我听说我应该使用 Ajax.BeginForm ,但我还不清楚如何把它放进去? 我的理解是,我需要 <div id="divStatus"> 来显示结果,但在我的情况下......结果是部分视图本身。

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

我应该在PV外添加 div 吗? 我应该在 div 中添加围绕的'@if(IsAuthenticate)'来电吗?
在这种情况下,使用 Ajax.BeginForm Ajax.ActionLink 更好吗?

代码: Controller的代码应该是什么样的?

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

        return PartialView("_myPV");
    }

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

真正感谢任何帮助!!!

1 个答案:

答案 0 :(得分:4)

我个人不会同时使用。我会使用一个单独的javascript文件,我将AJAX化链接:

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