2011-03-29 71 views
2

我有一個局部視圖內的兩個相反ActionLinks:MVC3部分視圖 - Ajax.BeginForm還是Ajax.ActionLink更好?

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

每個動作鏈接呼籲控制器不同的方法。

我聽說我應該使用Ajax.BeginForm但我仍然不清楚如何把這個? 我的理解是,我需要一個<div id="divStatus">來顯示結果,但在我的情況下......結果是部分視圖本身。

問題:我如何確保使它所以控制器只是刷新調用局部視圖?

我應該在之外只加一個div PV嗎?
我應該加div PV 圍繞'@if(IsAuthenticate)'調用嗎?
在這種情況下使用Ajax.BeginFormAjax.ActionLink更好嗎?

CODE:控制器的代碼應該是什麼樣的?

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

     return PartialView("_myPV"); 
    } 

沒有確認參與,沒有「外部」的div需要填充,只是光伏獨立的頁面光伏所在的一個簡單的刷新。

任何幫助將得到真正的讚賞!

回答

4

我個人不會使用。我會用一個單獨的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 AJAX腳本:

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

我想你的第一個方法。 1)我添加了對unobstrusive ajax腳本的引用 2)我添加了腳本函數調用(因爲