0

配列を含む複雑なモデルがあります。この配列のアイテムをレンダリングするために、次のように EditorFor を使用しています。

for (int i = 0; i < Model.Contacts.Phones.Length; i++)
{       
    @Html.EditorFor(x => x.Contacts.Phones[i])
}

エディター内には投稿フォームがあります。問題は、バインディング プレフィックスを正確に指定した場合にのみバインディングが成功することです。

[HttpPost]
public ActionResult SavePhone(
    [Bind(Prefix = "Contacts.Phones[0]")]Contact5UsedPhone model)
{ ... }

したがって、最初の要素に対してのみ機能します。プレフィックスの正しい形式は何ですか?

さらに、異なるプロパティの同じページ エディターもありますが、同じタイプのモデルと同じアクションが実行されます。複数のバインディング プレフィックスを設定することは可能ですか? 例えば

[HttpPost]
public ActionResult SavePhone(
    [Bind(Prefix = "Contacts.Phones[0], Contacts.AnotherPrefix")]
    Contact5UsedPhone model)
{ ... }

ありがとうございました!

編集 - モデル:

public class ContactsViewModel
{
    public Contact5UsedPhone AddiblePhone {get;set;}
    public Contact5UsedPhone[] Phones {get;set;}
    ...
}

編集 - 回答:これに対する解決策を見つけました。1 つの配列 (Phones) と 1 つのエンティティ (AddiblePhone) があるため、2 つのパラメーターと単純な if を使用しました。

[HttpPost]
public ActionResult SavePhone(
    [Bind(Prefix = "Contacts.Phones")]Contact5UsedPhone[] models, 
    [Bind(Prefix = "Contacts.AddiblePhone")]Contact5UsedPhone model)
{
    model = model ?? models[0];
    ...
}

質問はまだ残っています - AddiblePhones が配列としてあった場合はどうなるでしょうか? 1 つのパラメーターに 2 つのプレフィックスを使用することは可能ですか、それともこの場合のように 2 つのパラメーターに分割する必要がありますか?

4

2 に答える 2

1

これに対する明確でシンプルな答えが見つかりました。

@Html.EditorFor(x => x.Phones[i], 
    "~/Views/Contacts/EditorTemplates/Contact5UsedPhone.cshtml", 
    "")

最後の "" は、バインドにプレフィックスを使用しないことを意味します。それは素晴らしいので、質問の回答に示されているように、バインディングプレフィックスと2種類の受け入れられたモードは必要ありません。

少し疑問が残ります。配列として AddiblePhones があった場合はどうなるでしょうか。1 つのパラメーターに 2 つのプレフィックスを使用することは可能ですか、それとも質問の回答で提案したように分割する必要がありますか? しかし、そのようなものが必要な場合、おそらくこれは悪い設計を示しています...

編集 (Telerik コントロール): Telerik ドロップダウン リストを使用すると、要素の一意の ID が生成されず、これらのコントロールが jQuery で制御されるため、適切に機能しないため、この優れたソリューションの問題が発生します。

警告: Bind 属性を使用する場合、属性とパラメーターの型の間に " " (スペース) を使用できないことがわかりました。

作品:

[Bind(Prefix = "Phones")]Contact5UsedPhone[]

動作しません:

[Bind(Prefix = "Phones")] Contact5UsedPhone[]

これが配列の場合だけかどうかはわかりません。しかし、それは私には奇妙に思えます。

于 2011-06-30T10:50:48.560 に答える
1

明確な解決策が見つかってよかったです。多分あなたはより明確なものを好むでしょう。
http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/
http://zahidadeel.blogspot.com/2011/をご覧ください。05/master-detail-form-in-aspnet-mvc-3-ii.html
http://ivanz.com/2011/06/16/editing-variable-length-reorderable-collections-in-asp-net-mvc -パート1/

于 2011-06-30T14:02:07.427 に答える