動態建立Rating控制項不能儲存ViewState的解決方案
前言:
Rating控制項用來標識分級,目前已經有廣泛應用。AJAX Control Toolkit中的Rating也做的相當成熟 ,也算是ASP.NET AJAX擴充中做的最像傳統服務端控制項的一個了。然而,最近很多朋友抱怨說如果在後台 代碼中動態建立Rating控制項,那麼在PostBack發生後,Rating的狀態將會丟失(未存入ViewState)。本 文介紹兩種方法來解決此問題。
問題重現:
如果按以下代碼動態建立Rating控制項,則點擊Button後,Rating選取的值將會丟失:
<%@ Page Language="C#" %><%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> protected void Page_Load(object sender, EventArgs e) { AjaxControlToolkit.Rating rt = new Rating(); Page.Form.Controls.Add(rt); rt.ID = "LikeRating"; rt.MaxRating = 5; rt.CurrentRating = 2; rt.StarCssClass = "ratingStar"; rt.WaitingStarCssClass = "savedRatingStar"; rt.FilledStarCssClass = "filledRatingStar"; rt.EmptyStarCssClass = "emptyRatingStar"; }</script><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title> <style type="text/css"> /* Rating */.ratingStar { font-size: 0pt; width: 13px; height: 12px; margin: 0px; padding: 0px; cursor: pointer; display: block; background-repeat: no-repeat; } .filledRatingStar { background-image: url(Images/FilledStar.png); } .emptyRatingStar { background-image: url(Images/EmptyStar.png); } .savedRatingStar { background-image: url(Images/SavedStar.png); } </style></head><body> <form id="form1" runat="server"> <cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"> </cc1:ToolkitScriptManager> <div> </div> <asp:Button ID="Button1" runat="server" Text="Button" /> </form> <p> </p></body></html>