双向绑定
让我们说,我们有一个对象双向绑定
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后重新加载页面,但属性始终为空。请帮忙,我哪里出错了?
伤心地说,但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();
在OnInit你总是会为null ..删除这些代码,并保持在页面加载..
只需要在第一次在所有的岗位绑定不回来。
的Page_Load(){
if(!Page.IsPostBack)
{
if (EntityObject== null)
EntityObject= new EntityObject();
FormView.DataSource = new[] { EntityObject };
FormView.DataBind();
}
}
这里的问题是,你正在试图创建dynami c控制。
您可以使用.aspx页面中GridView控件并绑定数据时,它在默认情况下,而不是你拥有的视图状态..
反正网络是无状态的,我们应该通过ViewState中或会话或应用程序保留数据。你也可以将它保存在缓存中,但不可靠(我们可以使它更实用可靠)。大多数.NET控件都内置了ViewState。
因为我知道gridview适合显示和编辑数据表示为DataTable在底层数据源中的行,但我需要显示某种形式必须绑定到buisness对象,这是不支持的导致web是无状态的) – Alexander
对于那些看,我做了这个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');
,这似乎是有帮助的,现在输入的数值保持回发后,但是当我访问EntityObject它stiil都空 – Alexander
看看我的上述评论和尝试与.. ..希望那些帮助.. –