假设我们有一个对象
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 在回发后重新加载页面时在属性中包含这些值,但属性始终为 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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)