0

プロパティを持つエンティティ クラスがあり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するEvalSelectedValue、フォームは正常に送信されますが、MailingStateプロパティは更新されません。エンティティのカスタム プロパティにフォーム コントロールをバインドするにはどうすればよいですか?

4

1 に答える 1

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>
于 2012-06-15T18:37:58.470 に答える