为什么一个按钮内用户控件不会发生
问题描述:
.NET专业人士在那里的OnClick事件为什么一个按钮内用户控件不会发生
我有,我想一个问题,与大家分享,如果能够得到一个忠告:
我加载用户控件动态使用datalist。我为从数据库中获得的每一行加载这个usercontrol,它可能是这个控件的30个不同实例。
当用户点击按钮,我希望能够得到这个特定的usercontrol的属性的值,在我的理解,我留意usercontrol ID做到这一点,这就是为什么我想分配我的“自定义ID”到每个加载的控件,所以我将能够找到它。 也许我错过了一些东西,也许这不是最好的方式,我愿意提供建议。 反正.....
用户控件代码隐藏:
public partial class SearchBullet : System.Web.UI.UserControl
{
public static int i = 0;
private string casterLOGO;
public string CasterLOGO
{
get { return casterLOGO; }
set { casterLOGO = value; }
}
private string casterNameSB;
public string CasterNameSB
{
get { return casterNameSB; }
set { casterNameSB = value; }
}
private string player1NameSB;
public string Player1NameSB
{
get { return player1NameSB; }
set { player1NameSB = value; }
}
private string player2NameSB;
public string Player2NameSB
{
get { return player2NameSB; }
set { player2NameSB = value; }
}
private string mapSB;
public string MapSB
{
get { return mapSB; }
set { mapSB = value; }
}
private string gameFrameSB;
public string GameFrameSB
{
get { return gameFrameSB; }
set { gameFrameSB = value; }
}
private string serieSB;
public string SerieSB
{
get { return serieSB; }
set { serieSB = value; }
}
private string race1SB;
public string Race1SB
{
get { return race1SB; }
set { race1SB = value; }
}
private string race2SB;
public string Race2SB
{
get { return race2SB; }
set { race2SB = value; }
}
private string castURLSB;
public string CastURLSB
{
get { return castURLSB; }
set { castURLSB = value; }
}
private string likeAmountSB;
public string LikeAmountSB
{
get { return likeAmountSB; }
set { likeAmountSB = value; }
}
private string qRYstring;
public string QRYstring
{
get { return qRYstring; }
set { qRYstring = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack == false)
{
i++;
this.PreRender += new EventHandler(Cast_PreRender);
this.ID = "Result" + i.ToString();
}
PlayButton.ID = i.ToString();
}
void Cast_PreRender(object sender, EventArgs e)
{
PlayerName1.Text = Player1NameSB;
PlayerName2.Text = Player2NameSB;
CasterName.Text = CasterNameSB;
ImageRace1.ImageUrl = Race1SB;
ImageRace2.ImageUrl = Race2SB;
Map.Text = MapSB;
GameFrame.Text = GameFrameSB;
LikeAmount.Text = LikeAmountSB;
CasterLOGOIMG.ImageUrl = CasterLOGO;
PlayButton.AlternateText = "yay";
}
protected void PlayButton_Click1(object sender, ImageClickEventArgs e)
{
Image img = (Image)sender;
string tt = img.AlternateText;
int j = 0;
Response.Redirect("default2.aspx");
// lb.Text = img.ClientID;
}
}
aspx页面:
<asp:DataList ID="WatchLaterDL" runat="server" DataSourceID="SDSWatchLater" RepeatColumns="1">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<Search:Bullet runat="server" EnableViewState="false" ID="SearchResults" Player1NameSB='<%#Bind("Player_Name") %>'
Player2NameSB='<%#Bind("Expr1") %>' CasterNameSB='<%#Bind("Caster_Name") %>'
Race1SB='<%#Bind("Race_1") %>' Race2SB='<%#Bind("Race_2") %>' MapSB='<%# Bind("Map")%>'
GameFrameSB='<%#Bind("Game_Frame") %>' LikeAmountSB='<%#Bind("Like_Amount") %>'
CastURLSB='<%#Bind("Cast_URL") %>' CasterLOGO='<%#Bind ("Caster_LOGO") %>' />
</ItemTemplate>
<SeparatorTemplate>
<br />
</SeparatorTemplate>
</asp:DataList></div>
的问题是,这样做后,当我点击按钮什么也没有发生,我的意思是,当调试时,我从来没有进入OnButton_Click事件。如果我删除 - > this.ID =“Result”+ i.toString();和 - > PlayButton.ID = i.ToString();没关系。
如果有任何选择,你可能需要评估我的问题,生病很高兴证明,并需要额外的代码。 非常感谢您的帮助。
答
我的解决办法是这样的:
的使用图像BUTTOM代替
,我使用超链接。在用户控件的ON_LOAD事件,我分配到超链接的所有属性我的用户控件的SRC属性,并通过使用
查询字符串到另一个页面的。
它是动态加载的Web用户控件还是自定义控件?你可以发布一些代码来显示你是如何做到这一点的? – 5arx 2012-04-13 13:58:39
为什么你要更改这些控件的ID?我可以看到它是如何引起问题的,但老实说,我从来不需要在代码隐藏中更改ID。 – SouthShoreAK 2012-04-13 15:00:43
负载和预渲染器中的变量i是什么?似乎很怀疑它的值会在加载和预渲染之间匹配。您可以在载入过程中将您的i存储在您的控件的视图状态中,而不是触摸ID。 – jbl 2012-04-13 15:10:00