我有一个名为“lvQuestions”的列表视图,其上有一个标签(称为lblMissingField
)和其他几个字段。当用户尝试回发页面时,我调用一个首先设置ALL lvlMissingField.Text = string.empty
的例程,然后验证ListViewDataItem中的“其他”字段是否已填写。如果它们尚未填充,我设置特定的listview的lvlMissingField.Text = "*"
用“*”直观地标记它们(注意:不使用标准的asp.net验证器)。
那么,会发生什么?显示每个lblMissingField.Visible,我在这里缺少什么?
foreach(ListViewDataItem question in unansweredQuestions)
{
((Label)question.FindControl("lblMissingField")).Text = "*";
}
我已经确定unansweredQuestions只是那些我想要的ListViewDataItems,但仍然很惊讶看到输出HTML将它们全部设置为“*”......?
我也试过设置Visible = true
而不是将文本设置为'*'(这是我最初的偏好)而没有任何运气。
在这里有点生气......
答案 0 :(得分:0)
当我需要执行类似于您正在执行的功能并且更新/检查是在服务器端完成时,我已经为我想要自定义的每个控件实现了一个DataBinding方法。当某些东西发生变化时,我会重新修改我的模型,并更新需要更改的部分。
因此,例如在您的情况下假设我绑定到具有以下详细信息的对象列表(可能是DataTable或其他):
public class MyData
{
public string Question { get; set; }
public string Answer { get; set; }
}
public List<MyData> listOfMyData = GetListOfMyData();
然后我的标签上的数据绑定事件将被实现
<asp:Label ID="lblMissingField" runat="server" OnDataBinding="lblMissingField_DataBinding" />
然后执行数据绑定:
protected void lblMissingField_DataBinding(object sender, System.EventArgs e)
{
Label lbl = (Label)(sender);
lbl.Text = (Eval("Answer").ToString() == string.Empty) ? "*" : string.Empty;
}
这使您可以对模板中的每个项目进行大量控制。在加载数据后,您不必处理所有控件,而是可以在绑定数据时修改数据。
我知道这不是解决您确切问题的方法,但可能只是建议另一种解决问题的方法。