如何绑定到实体分部类中的自定义属性

时间:2012-06-15 16:48:59

标签: c# asp.net data-binding drop-down-menu eval

我有一个MailingState属性的实体类。我想在另一个属性中对该值进行一些操作,所以我补充说:

public string MailingStateAbbreviation
{
    get { return getStateAbbreviation(MailingState); }
    set { MailingState = value; }
}

但是,在DetailsView EditItemTemplate中,当我尝试提交修改表单时,以下内容失败:

<asp:DropDownList ID="ddlMailingState" runat="server" DataSourceID="ddlAllStates"
        AppendDataBoundItems="True" DataTextField="StateAbbreviation"
        DataValueField="StateAbbreviation"
        SelectedValue='<%# Bind("MailingStateAbbreviation") %>'>
    <asp:ListItem Value="" Text="" />
</asp:DropDownList>

我收到此错误:

  

在插入,更新或删除操作期间,在实体上找不到名为“MailingStateAbbreviation”的属性。检查以确保指定为绑定表达式的属性可用于数据源。

如果我在Bind上将Eval更改为SelectedValue,则表单提交正常但MailingState属性未更新。如何将表单控件绑定到我的实体上的自定义属性?

1 个答案:

答案 0 :(得分:0)

虽然我更喜欢不涉及处理事件的更具声明性的方法,但这很有用。我在OnItemUpdating添加了一个DetailsView处理程序,实现如下:

protected void dvOrg_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
    var view = (DetailsView)sender;
    var mailStateDdl = (DropDownList)view.FindControl("ddlMailingState");
    e.NewValues["MailingState"] = mailStateDdl.SelectedValue;
}

在我的.aspx中,我有这个:

<asp:DropDownList ID="ddlMailingState" runat="server" DataSourceID="ddlAllStates"
        AppendDataBoundItems="True" DataTextField="StateAbbreviation"
        DataValueField="StateAbbreviation"
        SelectedValue='<%# Eval("MailingStateAbbreviation") %>'>
    <asp:ListItem Value="" Text="" />
</asp:DropDownList>