Vin*_*ent 7 c# asp.net formview objectdatasource
我尝试更新FormView时出现此错误
无法在ObjectDataSource'odsForm'中的DataObjectTypeName属性指定的类型上找到名为"MainContact.FirstName"的属性.
我认为这是因为我在EditTemplate中使用了像这样的文本框
<asp:TextBox Text='<%# Bind("MainContact.FirstName") %>' ID="txtFirstName" runat="server" />
Run Code Online (Sandbox Code Playgroud)
它在文本框中显示正确的文本,但显然它在更新时不起作用.
这是FormView的数据源
<asp:ObjectDataSource ID="odsForm" runat="server" DataObjectTypeName="Helpers.BusinessObjects.EntryItem"
SelectMethod="GetEntryByEmail" TypeName="Helpers.DataAccessers.EntryHelper"
UpdateMethod="UpdateEntry">
<SelectParameters>
<asp:SessionParameter SessionField="email" Name="email" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
Run Code Online (Sandbox Code Playgroud)
这是EntryItem类
public class EntryItem
{
public int Id { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public Person MainContact { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
和人类
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
调试器进入FormView ItemUpdating事件处理程序,但从不进入Helpers.DataAccessers.EntryHelper.UpdateEntry.
我怎么解决这个问题?
两种可能的方法。
首先,您可以DataObjectTypeName="Helpers.BusinessObjects.EntryItem"从ObjectDataSource. 我从来没有使用过它,绑定总是有效的。
但这可能不会有帮助,因为Bind/Eval可能无法遵循参考文献(Bind("MainContact.FirstName"))。
相反,将其重写为
<%# ((EntryItem)Container.DataItem).MainContract.FirstName #>
Run Code Online (Sandbox Code Playgroud)
缺点是您失去了自动双向装订功能,因此您必须为装订机提供一些帮助。只需将Inserting/Updating处理程序添加到您的 ObjectDataSource 和内部处理程序中:
protected void TheObjectDataSource_Updating( object sender, BlahBlahEventArgs e )
{
// find the control in the data bound parent
TextBox txt = (TextBox)YourFormView.FindControl( "txtFirstName" );
// read the value and add it to parameters
e.Parameters.Add( "nameofyourparameter", txt.Text );
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2044 次 |
| 最近记录: |