2009-08-18 6 views
0

- ASP.NET MVC内でjQueryと一緒に実行 -PartialViewはポストバックなしで再レンダリングできますか?

私は<LI>ブロックをドロップダウンメニュー項目のリストとしてレンダリングするためにjQueryを使用しています。ユーザーがログインしていなければ、そのリストには3つの項目があります - ログインしていれば4項目です。その4番目の項目はいくつかの条件を実行する必要があります。コントロールとメインページコール:

<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

アップデートパネルの使用を検討しましたか? updatepanelsは「遅い」として知られていますが、実際にどのくらいのデータがポストバックされているかを確認するには、firebugを使用します。それは小さいかもしれませんが、それは頭がいっぱいで、ページのライフサイクルをチェックしておく必要があります –

答えて

1

結果(JSONおそらく)にShowLoginStatus.ascxのHTMLを返すことができます。
Hereは、ビューを文字列にレンダリングしてこれをどのように表現できるかを示しています。

もう1つの方法は、結果に応じてアクションから異なるコンテンツタイプを返すことです。

  1. ユーザーは資格情報を入力し、[LogIn]をクリックします。
  2. Serverは、それらをチェックし、:
    1. 正しい場合は - 部分ビューをレンダリングする(その結果はHTMLです)。
    2. なしの場合 - クライアントでエラーの説明など
  3. でJSONをレンダリングする - コンテンツがHTMLの場合は - そして、それが必要とされるwhereeverに設定します。
  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内容を含めパーシャルビューを返すようにした場合はどうですか?

つまり、PartialView(.ascx)を返すajax呼び出しがあり、その部分ビューはshowLoginStatusビューと必要な余分なマークアップで構成されています。

Ajax.ActionLinkとAjaxOptionsパラメータを見て、他のアイデアを得ることはありますか?

関連する問題