2011-01-06 9 views
2

asp:updateパネル内のasp:listview内でjQuery評価プラグインを使用しています。以下は、評価星のクリックで呼び出されている関数です。updatelパネル内のjQuery評価プラグイン

function DisplayRatings() {    
      $('DIV.ratingBar').each(function() { 
       var id = $(this).attr('id'); 
       var count = $(this).attr('rel'); 
       $('#' + id).raty({ 
        showCancel: false, 
        readOnly: false, 
        showHalf: true, 
        start: count, 
        onClick: function(score) {      
         // I have to pass the score and ID to server side      
        } 
       }); 
      }); 
     } 

は、今私は、サーバー側に「スコア」と「ID」を渡すと、リストビューを再バインドし、画面のリフレッシュせずに画面上の格付けを更新するメソッドを呼び出す必要があります。 これについてはどうすればよいかを提案してください(半分の評価をサポートしていないので、ajaxツールキットの評価は使用できません)

答えて

3

サーバーにデータを渡すには、非表示のフォームフィールド):

<asp:HiddenField id="score" runat="server" name="Score" ClientIDMode="Static" /> 
<asp:HiddenField id="id" runat="server" name="Score" ClientIDMode="Static" /> 

あなたが前後に渡すために多くのデータを持っていた場合、おそらくそれだけで1つの隠れ場を使用する意味を作成し、そこにすべてを保存するためにシリアライズ/デシリアライゼーションのを使用します。次に、あなたのonClick機能では、これらのフィールドの値を設定し、非同期ポストバックを開始:コントロールを提出バインドユーザーによってクリックされたかのように

$('#score').val(score); 
$('#id').val(id); 
__doPostBack('UpdatePanelID', '') 

これは、同じあなたのUpdatePanelの非同期更新を、原因となります。

jQueryコントロール自体がUpdatePanelにある場合は、非同期ポストバック後に再設定する必要があることに注意してください。これは、まるでページが再ロードされたかのように動作するためです。ただし、$(document).ready()で実行されているJavaScriptコードは、ページ全体が実際にリロードされていないため、非同期ポストバック後にを実行しません。

理想的には、開始したイベントの結果として変更したくない可能性があるので、評価パネルを評価パネルの外に置きます。使用して、それを解決

// Page startup script - this adds a hook after an update panel is refreshed 
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(onRefresh); 

function onRefresh(sender, args) { 
    // You can try to check which panel was updated 
    var panelsUpdated = args.get_panelsUpdated(); 
    var panelsCreated = args.get_panelsCreated(); 
    // but usually it's easier to just track the state of your jquery stuff 
    if (my_jquery_thing_is_visible && 
     my_indicator_that_it_has_already_been_configured===false) { 
     configureJqueryThing(); 
    } 
} 
0

:これはいくつかの理由では不可能である、またはあなたはそれにそれが表示されている最初の時間を設定するための動的な方法が必要な場合は、ページ更新の端からフックを追加jQueryとAJAX

ASPX

関数SaveRating(ID、スコア){
VARのparams = '{のlinkID: "' + ID + ' " ratingVal:"' +スコア+" '}'。
$アヤックス({ タイプ: "POST"、 URL: "page.aspx/UpdateRating"、 データ:paramsは、 のcontentType: "アプリケーション/ JSON;のcharset = UTF-8"、 データ型:「JSON " }); DB に更新する }

aspx.cs

[System.Web.Services.WebMethod] パブリック静的ボイドUpdateRating(ストリングのlinkID、INT ratingVal) {//コード}

関連する問題