0

これは私には痛々しいほど明白に思えますが、何らかの理由で私はそれを私が望むように動作させることができません。おそらく私がそれをしている方法は不可能ですが、それはありそうもないようです。この質問は多少関連している可能性があります:同じページ上のASP.NETMVCモデルバインディング関連エンティティ

複数の関連するエンティティ参照を持つエンティティを編集するためのEditorTemplateがあります。エディターがレンダリングされると、ユーザーには関連するエンティティを選択するためのドロップダウンリストが表示され、ドロップダウンリストはその値としてIDを返します。

<%=Html.DropDownListFor(m => m.Entity.ID, ...)%>

リクエストが送信されると、フォームの値は期待どおりに「Entity.ID」という名前になりますが、アクションパラメータとして定義された強く型付けされたモデルには、リクエストで渡された値が入力されたEntity.IDがありません。

public ActionResult AddEntity(EntityWithChildEntities entityWithChildEntities) { }

Bind()属性をいじってBind(Include = "Entity.ID")、entityWithChildEntitiesで指定してみましたが、うまくいかないようです。私も試しBind(Include = "Entity")ましたが、その結果、ModelBinderは完全な「エンティティ」定義をバインドしようとしました(当然のことながら)。

子エンティティIDを埋めるためにデフォルトのモデルバインダーを取得する方法はありますか、または各子エンティティのIDにアクションパラメーターを追加してから、値をモデル定義に手動でコピーする必要がありますか?

4

2 に答える 2

1

AutoMapperを見たことがありますか?バインディングは機能するはずなので、これは必要ないことに同意しますが...

ヘルパーの使用に少し問題がありHtml.XYZFor、MVC 1.1表記の使用に戻りましたが、すべて機能します。

于 2010-06-01T22:41:00.673 に答える
0

DropDownListFor1つのパラメーターを受け取るヘルパーメソッドはありません。標準のDropDownListForメソッドは、少なくとも2つのパラメーターを取ります。1つは選択の名前を計算するために使用されるラムダで、2つ目はIEnumerable<SelectListItem>:です。

<%= Html.DropDownListFor(m => m.Entity.ID, Model.EntitiesList) %>

また、タイプはどのようにEntityWithChildEntities見えますか?次のようなものである必要があります。

public class EntityType
{
    public string ID { get; set; }
}

public class EntityWithChildEntities
{
    public EntityType Entity { get; set; }

    public IEnumerable<SelectListItem> EntitiesList
    {
        get 
        {
            return new[]
            {
                new SelectListItem { Value = "1", Text = "foo" },
                new SelectListItem { Value = "2", Text = "bar" },
            }
        }
    }
}
于 2010-06-02T06:10:02.513 に答える