【问题标题】:Binding values to user control but it returns me null将值绑定到用户控件,但它返回 null
【发布时间】:2014-09-13 17:16:50
【问题描述】:

在我的 webfrom 中,我有一个转发器,它从 web 服务获取一些项目信息,输出是列表。

<asp:Repeater ID="Repeater1" runat="server">
 <ItemTemplate>
          <uc1:ItemDetailsUserControl runat="server" ID="ItemDetailsUserControl1"  HotelCode='Eval("Item.Code")' CityCode='<%#Eval("City.Code")%>'/>
</ItemTemplate>

要获取每个项目的详细信息,我在我的用户控件中具有此定义 - ItemDetailsUserControl,

    public string ItemCode { set; get; }
    public string CityCode { set; get; }

这是后面的用户控制代码,

    protected void Page_Load(object sender, EventArgs e)
    {
       //do some stuff 
       response.write(ItemCode); //null
       response.write(CityCode); //null
    }

问题在于转发器中的绑定。当我得到 eval 时,它只是返回我的值,但是当我将它作为属性传递时,它返回 null 值。

【问题讨论】:

  • Page_Load 事件中,中继器尚未填充 - 此时属性为空。
  • 太愚蠢了,我为这个愚蠢的问题卡了一天,我不知道为什么我没有检查:D 反正 tnx

标签: c# asp.net


【解决方案1】:

您每年都获取属性值 - 在Page_Load 事件中,中继器控件尚未填充数据。一种可能的解决方案是将您的代码移动到Page_PreRender event

检索和使用resp的示例。更改绑定到中继器的数据可以在这里找到:http://runnable.com/UjMj269qAWwQAAB3/asp-net-how-to-use-repeater

要在给定示例中匹配您的情况,请将此代码添加到现有代码中:

protected void Page_PreRender(object sender, EventArgs e)
{
    if (lstEmployees.Count > 0)
    {
      lstEmployees.First().FirstName = "Test";
      rptEmployees.DataSource = lstEmployees;
     //You need to rebind the repeater
      rptEmployees.DataBind();
    }
}

private List<Employee> lstEmployees = new List<Employee>();

输出:http://runnable.com/VBQHUzNw-OxoDUWX/output

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多