我正在尝试设置标签控件的文本,这是在详细信息视图中,但它不起作用。但它显示错误"对象引用未设置为对象的实例。" 请有人指导我.. ?? 我的前端代码是:
<asp:Panel ID="sub_question_panel" runat="server">
<asp:DetailsView ID="DetailsView1" runat="server" CellPadding="6" ForeColor="#333333" AutoGenerateRows="false" GridLines="None" >
<Fields>
<asp:TemplateField>
<ItemTemplate>
<table id="Question_view_table">
<tr>
<td style="font-family:Arial Rounded MT;">
<label id="Question_no"><span style="font-size:20px;">Question</span>:</label>
<asp:Label ID="Ques_id_label" runat="server" Text="Label"></asp:Label></td>
</tr>
<tr>
<td style="height:20px"></td>
</tr>
<tr>
<td style="font-family:'Times New Roman'; font-size:18px; ">
<label id="Question_detail"><%# Eval ("Question") %></label>
</td>
</tr>
<tr>
<td style="font-family:'Times New Roman'; font-size:18px;">
<ol style="list-style:upper-alpha">
<li>
<label id="optn1">   <%# Eval ("Option1") %></label></li>
<li>
<label id="optn2">   <%# Eval ("Option2") %></label></li>
<li>
<label id="optn3">   <%# Eval ("Option3") %></label></li>
<li>
<label id="optn4">   <%# Eval ("Option4") %></label></li>
</ol>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
</asp:Panel>
我的后端代码是:
protected void Page_Load(object sender, EventArgs e)
{
int question_id = 1;
Label Question_Id = DetailsView1.FindControl("Ques_id_label") as Label;
Question_Id .Text = Convert.ToString(question_id);
}
答案 0 :(得分:0)
您使用FindControl查找Ques_id_label
,但无论如何都要正常引用它:Ques_id_label.Text =
应该是Question_Id.Text = Convert.ToString(question_id);
,其中包含您使用FindControl指定的ID。
但它甚至编译了吗?你使用像Visual Studio这样的编辑器吗?因为当我尝试使用您的代码片段时,它会给出错误The name 'Ques_id_label' does not exist in the current context
,因为它应该是。
答案 1 :(得分:0)
您必须使用 FindControl 作为行,而不是DataListView
你想通过id找到你的标签,但是哪一个?对于每一行,您都有一个ID为'Ques_id_label'的标签。因此,要查找特定标签,您必须指定预期的行。我没有使用 DataLisView ,但我知道它在逻辑上类似于 Asp:Repeater 。在从行发送命令时在Repeater的行中查找控件:
protected void SaveAnswer(Object Sender, RepeaterCommandEventArgs e)
{
Label Ques_id_label = (Label)e.Item.FindControl("Ques_id_label");
使用e.item
指定预期的行。