c#
  • asp.net
  • 2014-09-13 71 views 1 likes 
    1

    在我的webfrom中,我有一箇中繼器,它從Web服務獲取一些項目信息,並且輸出是列表。將值綁定到用戶控件,但它返回空null

    <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 
        } 
    

    問題是在中繼器中綁定。當我得到評估它只是返回給我的價值,但當我通過它作爲一個屬性它返回空值。

    +1

    在「Page_Load」事件中,中繼器尚未填充 - 此時屬性爲空。 – pasty 2014-09-13 08:53:34

    +0

    這麼愚蠢,我堅持了一天這個愚蠢的問題,我不知道爲什麼我沒有檢查:D反正Tnx – Behzad 2014-09-13 08:59:53

    回答

    2

    您每年都會收到屬性值 - 在Page_Load事件中,中繼器控件尚未填充數據。一種可能的解決方案是將您的代碼移動到Page_PreRender event

    一個檢索和使用響應的例子。更改綁定到中繼器的數據可以在這裏找到: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

    相關問題