2009-08-18 84 views
0

- 在ASP.NET MVC和jQuery一起運行 -部分視圖可否在沒有回傳的情況下重新渲染?

我使用jQuery將<LI>塊渲染爲下拉菜單項列表。如果用戶沒有登錄,那麼在該列表中有3個項目 - 如果他已經登錄,則有4個項目。第四個項目需要運行一對條件,然後才能確定它攜帶的是什麼有效載荷,因此我將該代碼放在.ascx中控制和主頁呼叫:

<div id="loginBox"> 
    <% Html.RenderPartial("showLoginStatus"); %> 
</div> 

以決定如何呈現它。

只要我願意等待基於AJAX登錄的回發,這個工作就很有用。我現在需要做的是讓代碼在沒有頁面刷新的情況下運行。

,顯示無論是登錄按鈕或用戶名頁面的部分看起來像:

var form = $("#loginForm"); 
    form.submit(function() { 
     var data = form.serialize(); 
     $.post(form.attr("action"), data, function(result, status) { 
      if (result.Success) { 
       $(".showLoggedUser").html(result.UserName + '<br /><a href="/Admin/Account/LogOut">Log Out</a>'); 
       //how can I force the code contained in 'showLoginStatus.ascx' to render at this point? 
       api.close(); 
      } else { 
       $('.loginErrors').html(result.ErrorMessage); 
      } 
     }, "json"); 
     return false; 
    }); 
}); 
+0

你有沒有考慮過使用updatepanel?雖然updatepanels被稱爲「緩慢」,但使用firebug可以查看實際返回的數據量。它可能很小,但它應該可以幫助您節省大量的時間和檢查頁面生命週期 – 2009-08-19 00:30:41

回答

1

您可以在結果中返回ShowLoginStatus.ascx的HTML(可能是JSON)。
Here是如何將視圖渲染爲字符串來實現的。

另一種方法是根據結果從動作中返回不同的內容類型。

  1. 用戶輸入憑據並單擊登錄。
  2. 服務器檢查它們和:
    1. 如果正確 - 呈現部分視圖(所以結果是HTML)。
    2. 如果沒有 - 與錯誤的描述等
  3. 在客戶端呈現JSON - 如果內容是HTML - 然後將其設置爲徘徊無論它是必要的。
  4. 如果內容是JSON - 向用戶顯示錯誤並進一步分析結果。

那麼你的JavaScript將是這樣的:

var form = $("#loginForm"); 
form.submit(function() { 
    var data = form.serialize(); 
    $.post(form.attr("action"), data, function(result, status) { 
     // Write your isJson function to check the result type 
     if (!isJson(result)) { 
      $(".showLoggedUser").html(result); 
      api.close(); 
     } else { 
      $('.loginErrors').html(result.ErrorMessage); 
     } 
    }); // DO NOT SPECIFY RESULT TYPE 
    return false; 
}); 

});

0

那麼如果Ajax請求是返回包括showLoginStatus內容的局部視圖?

即有ajax調用返回PartialView(.ascx)並且該部分視圖由showLoginStatus視圖和您需要的任何額外標記組成的操作。

也許看看Ajax.ActionLink和AjaxOptions參數來獲得其他想法?

相關問題