[英]Two way databinding in ASP.NET
假設我們有一個對象
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在PostBack之后重新加載頁面時在屬性中包含這些值,但屬性始終為null。
遺憾的是,但ASP.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();
對於那些看起來,我做了這個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');
在OnInit中,你總是使其為null ..刪除那些代碼並保持在頁面加載..
只需要在第一次綁定而不是在所有的帖子中。
Page_Load(){
if(!Page.IsPostBack)
{
if (EntityObject== null)
EntityObject= new EntityObject();
FormView.DataSource = new[] { EntityObject };
FormView.DataBind();
}
}
這里的問題是你正在嘗試創建動態控件。
你可以在.aspx頁面中使用gridview控件並綁定數據,默認情況下它是viewstate而不是你的..
無論如何,web是無狀態的,我們應該通過ViewState或Session或Application保留數據。 你也可以將它保存在緩存中但不可靠(我們可以使它在實用上可靠)。 大多數.NET控件都內置了ViewState。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.