[英]Change text on button in datalist not working
我有以下代码,它可以更改URL,但不会更改按钮上的文本。 我想念什么? 该按钮在数据列表中,我想在按下按钮时更改按钮上的“文本”。 应该发生的情况是用户单击“测验”按钮,URL应该更改为quizURL(这可行)。 同时,按钮上的文本应更改为Video(这不起作用)。 然后,当用户单击相同的按钮时,它将切换回测验。 我正在尝试让一个按钮充当切换以显示测验或视频。
<asp:Button ID="btnQuizVid" runat="server" Text="Quiz" CommandName="quiz" CssClass="buttonStyleGrey" />
protected void trainingDataList_ItemCommand(object source, DataListCommandEventArgs e)
{
List<Material> dataset = null;
string btnText = ((Button)(trainingDataList.Items[e.Item.ItemIndex].FindControl("btnQuizVid"))).Text;
if (e.CommandName == "quiz")
{
dataset = BasicCRUDtoolkit.GetMaterialByProfFocus(hdnTypeSelect.Value);
Button tmpBtn = e.Item.FindControl("btnQuizVid") as Button;
if (btnText == "Quiz")
{
tmpBtn.Text = "Video";
tmpBtn.DataBind();
dataset[e.Item.ItemIndex].videoURL = dataset[e.Item.ItemIndex].quizURL;
}
else
{
tmpBtn.Text = "Quiz";
dataset[e.Item.ItemIndex].videoURL = dataset[e.Item.ItemIndex].videoURL;
}
trainingDataList.DataSource = dataset;
trainingDataList.DataBind();
}
}
您在按钮标记中缺少OnCommand
值,因此在标记中设置的CommandName
值不知道触发时要调用的内容。 将OnCommand
值添加到您的按钮标记中,如下所示:
<asp:Button ID="btnQuizVid" runat="server" Text="Quiz" CommandName="quiz"
CssClass="buttonStyleGrey"
OnCommand="trainingDataList_ItemCommand" />
只需获取一次按钮控件,并且不要在按钮上调用.DataBind()
,因为更改将仅通过更改Text
属性反映出来,因为代码是在HTML发送到浏览器之前执行的。 将代码更改为此:
protected void trainingDataList_ItemCommand(object source,
DataListCommandEventArgs e)
{
List<Material> dataset = null;
var theButton = trainingDataList.Items[e.Item.ItemIndex]
.FindControl("btnQuizVid") as Button;
if (e.CommandName == "quiz")
{
dataset = BasicCRUDtoolkit.GetMaterialByProfFocus(hdnTypeSelect.Value);
if (theButton.Text == "Quiz")
{
theButton.Text = "Video";
dataset[e.Item.ItemIndex].videoURL = dataset[e.Item.ItemIndex].quizURL;
}
else
{
theButton.Text = "Quiz";
dataset[e.Item.ItemIndex].videoURL = dataset[e.Item.ItemIndex].videoURL;
}
trainingDataList.DataSource = dataset;
trainingDataList.DataBind();
}
}
我猜您需要将Button tmpBtn = e.Item.FindControl("btnQuizVid") as Button;
和theButton.Text = "Video";
在DataBind()
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.