ゲーム リスト (videogames.aspx) を表示するページがあります。ユーザー コントロールを使用して各ビデオゲームを表示する更新パネル内に DataGrid があります。(game.ascx) 私のビデオゲーム ページで使用されます。
このユーザーコントロールでは、ゲームの進行状況を言うことができます(ASPボタンを使用して、終了、プレイなど)
リストを表示するときにゲームを評価できるようにしたいと思います。そのために、私はhttp://www.wbotelhos.com/raty/を使用します
別のユーザーコントロールを作成しました(レート用)。game.ascx ユーザーコントロール内でこのユーザーコントロールを使用します。
初めてページの読み込みに問題がない場合 (現在のレートは表示されています)、最初のゲームでレートを変更して試してみることにしました。レートは webmethods を使用してデータベースに保存され、javascript によって画面に表示されます。 .
今、私は 2 番目のビデオゲームの進行状況を変更することに決めました。この時点 (ポストバック) では、最初のゲームの評価は以前の評価値に戻っています...
updatepanel が ViewState に古い値を保持しているという印象がありますか?
どうすればこの状況から抜け出すことができますか?
ビデオゲーム.aspx:
<asp:UpdatePanel ID="Update" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:DataGrid ID="dgJeux" runat="server" AutoGenerateColumns="false" OnItemDataBound="dgJeux_ItemDataBound" AllowPaging="true" PagerStyle-Position="TopAndBottom"
PageSize="10" GridLines="None" CssClass="table" ShowHeader="false" OnPageIndexChanged="dgJeux_PageIndexChanged">
<PagerStyle Mode="NumericPages" HorizontalAlign="Right" CssClass="paginationASP"/>
<Columns>
<asp:BoundColumn DataField="jeu_id" Visible="false"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="Jeu" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle">
<ItemTemplate>
<UC:UCJeu ID="ucJeu" runat="server"></UC:UCJeu>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</ContentTemplate>
</asp:UpdatePanel>
私のgame.ascx:
<table>
<tr>
<td><UC:UCNote ID="ucNote" runat="server"></UC:UCNote></td>
<td class="pull-right">
<asp:Repeater ID="rptAvancementJeu" runat="server" Visible="false" OnItemDataBound="rptAvancementJeu_ItemDataBound">
<HeaderTemplate>
<div class="btn-group" data-toggle="buttons-checkbox">
</HeaderTemplate>
<ItemTemplate>
<asp:Button ID="butAvancementJeu" CssClass="btn btn-success" runat="server" Text='<%# Eval("jeuavancement_libelle") %>' OnCommand="butAvancementJeu_OnCommand" CommandName="ChangerAvancement" Width="85"/>
</ItemTemplate>
<FooterTemplate>
</div>
</FooterTemplate>
</asp:Repeater>
</tr>
</table>
私の GameRate.Ascx :
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function EndRequestHandler(sender, args) {
if (args.get_error() == undefined) {
$(document).ready(function() {
$('#<%= noteMoyenne.ClientID %>').raty({
score: function () {
return $('#<%= noteMoyenne.ClientID %>').attr('data-rating');
},
readOnly: true
});
$('#<%=noteUtilisateur.ClientID %>').raty({
half: true,
click: function (score, evt) {
var contexte = new Array('<%= noteUtilisateur.ClientID %>', '<%= noteMoyenne.ClientID %>');
PageMethods.AffecteNoteEtRetourneNoteMoyenne($('#<%= hfObjectID.ClientID %>').val(), score, AffecterNoteEtMoyenne, null, contexte)
},
score: function () {
return $('#<%= noteUtilisateur.ClientID %>').attr('data-rating');
}
});
});
}
}
</script>
<table>
<asp:Panel ID="pnlNoteUtilisateur" runat="server" Visible="false">
<tr>
<td>
Note :
</td>
<td>
<div id="noteUtilisateur" runat="server"></div>
<asp:HiddenField ID="hfObjectID" runat="server" />
</td>
</tr>
</asp:Panel>
<tr>
<td>
Moyenne :
</td>
<td>
<div id="noteMoyenne" runat="server"></div>
</td>
</tr>
<tr>
<td></td>
<td>
<asp:Label ID="lblNombreNotes" runat="server" Text="(pas de note)"></asp:Label>
</td>
</tr>
</table>
rate によって生成される html の例:
<div id="ctl00_content_dgJeux_ctl03_ucJeu_ucNote_noteUtilisateur" data-rating="0.5" style="cursor: pointer; width: 100px;">
<img src="../img/stars/star-half.png" alt="1" title="Beurk">
<img src="../img/stars/star-off.png" alt="2" title="Mauvais">
<img src="../img/stars/star-off.png" alt="3" title="Pas mal">
<img src="../img/stars/star-off.png" alt="4" title="Bon">
<img src="../img/stars/star-off.png" alt="5" title="Addictif">
<input type="hidden" name="score" value="0.5">
</div>
評価値を表示するために data-rating 属性を使用します。私の場合、新しいレートの後の値は 3.5 になります。私の webmethod は適切に呼び出され、値はデータベースに保存されます。新しい data-rating は html で変更されます。問題は、別のゲームでゲームの進行を変更したいときに始まります。ポストバック後に最初のゲームの古いレート値が戻ってきます...
助けてくれてありがとう...私は迷っています