2011-09-15 255 views
5

讓我們說,我們有一個對象雙向綁定

class Entity 
{ 
    public string ID {get; set;} 
    public string Name {get; set;} 
} 

我想在一個頁面像這樣綁定屬性兩個文本框:

<asp:FormView ID="FormView" runat="server"> 
    <ItemTemplate> 
    <asp:textbox ID="TextId" Text='<%# Bind("ID") %>'/> 
    <asp:textbox ID="TextId" Text='<%# Bind("Name") %>'/> 
    </ItemTemplate> 
</asp:FormView> 

,然後寫在後面

public EntityObject 
     { 
      get { return ViewState["Entity"] as Entity; } 
      set { ViewState["Entity"] = value; } 
     } 
protected override void OnInit(EventArgs e) 
     { 
      if (EntityObject== null) 
       EntityObject= new EntityObject(); 

      FormView.DataSource = new[] { EntityObject }; 
      FormView.DataBind(); 
      base.OnInit(e); 
     } 

代碼當我在文本框中輸入值,我期待EntityObject有在性能這些值WH在PostBack後重新加載頁面,但屬性始終爲空。請幫忙,我哪裏出錯了?

回答

4

傷心地說,但aps.net不支持雙向綁定到.NET對象...... 相反,您可以使用的東西像每一個崗位「手工綁定」回(這裏AddIncomeSources是RepeaterControl)

 public List<Income> AdditionalIncomeList 
     { 
      get { return ViewState["AdditionalIncome"] as List<Income>; } 
      set { ViewState["AdditionalIncome"] = value; } 
     }     
      foreach (RepeaterItem item in AddIncomeSources.Items) 
      { 
       var amount = (TextBox)item.Controls.Cast<Control>().First(c => c.ID == "Amount"); 
       var document = (DropDownList)item.Controls.Cast<Control>().First(c => c.ID == "Document"); 
       AdditionalIncomeList[item.ItemIndex].Amount = amount.Text.ToDouble(); 
       AdditionalIncomeList[item.ItemIndex].IncomeDocument = document.SelectedValue; 
      } 
      AddIncomeSources.DataSource = AdditionalIncomeList; 
      AddIncomeSources.DataBind(); 
0

在OnInit你總是會爲null ..刪除這些代碼,並保持在頁面加載..

只需要在第一次在所有的崗位綁定不回來。

的Page_Load(){

if(!Page.IsPostBack) 
{ 
    if (EntityObject== null) 
      EntityObject= new EntityObject(); 

     FormView.DataSource = new[] { EntityObject }; 
     FormView.DataBind(); 
} 

}

+0

,這似乎是有幫助的,現在輸入的數值保持回發後,但是當我訪問EntityObject它stiil都空 – Alexander

+0

看看我的上述評論和嘗試與.. ..希望那些幫助.. –

0

這裏的問題是,你正在試圖創建dynami c控制。

您可以使用.aspx頁面中GridView控件並綁定數據時,它在默認情況下,而不是你擁有的視圖狀態..

反正網絡是無狀態的,我們應該通過ViewState中或會話或應用程序保留數據。你也可以將它保存在緩存中,但不可靠(我們可以使它更實用可靠)。大多數.NET控件都內置了ViewState。

+0

因爲我知道gridview適合顯示和編輯數據表示爲DataTable在底層數據源中的行,但我需要顯示某種形式必須綁定到buisness對象,這是不支持的導致web是無狀態的) – Alexander

0

對於那些看,我做了這個JavaScript插件。它的數據綁定非常接近WPF的功能,並且易於使用。它連接文檔.txt文件

https://github.com/jdemeuse1204/ObjectDataBinding

這裏是什麼我綁定一個看起來像

<input runat="server" class="popoutEditInput" style="width: 50px;" data-bind="path: Quote" /> 

要激活調用

$("#yourelementname").observe(yourobject, 'yourbindingname'); 

爲了得到一個例子用於保存或其他操作的對象返回

var object = $("#yourelementname").getObserveObject('yourbindingname');