ASP.NET数据绑定双向、双向从代码后台绑定。

8

因此,在ASP中进行双向数据绑定,我们这样做...

<asp:textbox id="txtField" runat="server" 
    text='<%# Bind("SomeField") %>'>
</asp:textbox>

SomeField位于DetailsView的DataSource中,作为文本框的容器。

或者我可以在代码后台执行此操作(使用文本框的OnDataBinding事件):

protected void SomeField_OnDataBinding(object sender, EventArgs e)
{ 
  ((TextBox)sender).Text = Eval("SomeField").ToString();
}

然而,EVAL是只读的...我怎么能在代码后端指定绑定(双向)?
2个回答

3
我已经找到了解决"边缘情况"的方法。我正在使用LLBLGen子类型,因此需要根据用户选择的单选按钮过滤器切换详细视图的数据源。我尝试在ASP中“声明性地”绑定到子类型字段“<%# Bind(...”,但这并没有起作用。我不得不采用代码后台的“hack”方式,在details_view预呈现方法中有条件地显示详细视图中的控件。对于每个字段,我都会有条件地设置它的单向(只读)绑定,在OnDataBinding...中完成。
e.g. ((TextBox)sender).Text = Eval("FilePrefix").ToString();

最后,为了获得要推入数据源的数据,我会"hack" DetailsView 的 OnItemInserting/Updating 事件(也是有条件的)...

e.Values["FilePrefix"] = txtFilePrefix.Text;

我觉得在这次黑客攻击之后感觉很肮脏,我想我需要洗个澡...

我仍然希望有人能提供一个更简洁的解决方案 :-)


0

Eval(单向)方法可以工作。我希望Bind(双向)可以工作。 此外,我没有使用重复器,而是使用详细视图。 - Konrad
我觉得我可能误解了你的问题。实际上并不存在双向绑定这种东西。你可以在.aspx页面或者代码后台中设置控件的值。要获取值(即用户输入),你需要访问控件的Text属性。那么"SomeField"是什么?是代码后台类中的一个属性吗? - Jakob Gade
Somefield是位于DetailsView的DataSource上的表列,它作为文本框的容器。我想让文本框将数据推送到数据库中。这就是为什么我需要使用Bind。实际上很简单。但是在代码后端似乎不太容易使用。虽然可以使用<%# Bind(是的,但在代码中并不容易... - Konrad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接