Частичное представление MVC3 - может ли DIV находиться внутри Ajax.BeginForm? - PullRequest
2 голосов
/ 30 марта 2011

Это то, что мне нужно сделать:

У меня есть частичное представление (PV):

    @if (Convert.ToBoolean(ViewData["IsLogged"].ToString())) 
    {
        <div id="onlineStatus">
            ONLINE >>
            @Html.ActionLink("Take a Break", "GoOffline", "Account")
        </div>
    } 
    else 
    {
        <div id="offlineStatus">
           IN A BREAK >>
            @Html.ActionLink("Go Online", "GoOnline", "Account")
        </div>
    }

Я помещаю этот PV в * _layout.cshtml *, поэтому каждый раз, когда я нажимаюна ActionLink страница должна оставаться прежней, а PV должен перерисовываться только асинхронно.

Я читаю об использовании Ajax.BeginForm и, похоже, ему нужен , но мой вопрос:
Q1: Должен ли я поставить внутри Ajax.BeginForm ??

@using (Ajax.BeginForm(new AjaxOptions {  
           UpdateTargetId="divStatus", 
            InsertionMode=InsertionMode.Replace }))  {    
<div id="divStatus">  
    @if (Convert.ToBoolean(ViewData["IsLogged"].ToString()))  
    {  
        <div id="onlineStatus">  
            ONLINE >>  
            @Html.ActionLink("Take a Break", "GoOffline", "Account")  
        </div>  
    }  
    else  
    {  
        <div id="offlineStatus">  
           IN A BREAK >>  
            @Html.ActionLink("Go Online", "GoOnline", "Account")  
        </div>  
    }  
</div>  
}  

КОНТРОЛЛЕР ... чтобы вернуть себя?

    public ActionResult GoOffline()
    {
        GoOffline();
        ViewData["IsLogged"] = "False";
        return PartialView("_OnlineStatusCtrl");
    }

ПРОБЛЕМА:
Вся страница перерисовывается как PV, так что, я думаю, она НЕ рисует себя внутри

Проблема в том, как я называю Ajax.Beginform ?
Проблема в том, что я поместил внутри Ajax.BeginForm ?
Является ли проблема в том, что вместо этого я должен поставить Ajax.BeginForm на _layout.cshtml ?

... просто я просто все еще не понимаю MVC ??

: -)

1 Ответ

2 голосов
/ 30 марта 2011

Вам не нужна форма Ajax для этого. Вы можете заключить PV в div с id divStatus и затем использовать следующее для ActionLinks:

@Ajax.ActionLink("Take a break", "GoOffline", "Account", new AjaxOptions { UpdateTargetId = "divStatus", InsertionMode = InsertionMode.Replace })

Ваш контроллер останется прежним. Это должно работать как ожидалось

...