0

modelsビューに2つ必要です。しかし、ビューを 1 つしか追加できなかったため、次のアプローチを取りました。

@model Tuple<My.Models.Mod1,My.Models.Mod2>

    @Html.DropDownListFor(m => m.Item2.humanKind,Model.Item2.allHuman)


    @Html.TextBoxFor(m => m.Item1.food)

しかし、私が得るのは次のエラーです。

The model item passed into the dictionary is of type 'My.Models.Mod2', but this dictionary requires a model item of type 'System.Tuple`2[My.Models.Mod1,My.Models.Mod2]'.

これは何ですか、どうすればこれを解決できますか?

アップデート

 public ActionResult Index()
        {
            var model2 = new Mod2 { allHuman = allHumans() };
            var model1 = new Mod1(); // JUST NOW I ADDED THIS, BUT IT DOESn't WORK
            return View(model1,model2);

        }
4

4 に答える 4

1

ビューごとにモデルを1つだけ持つことができます。Ufukが提案したように、タプルをインスタンス化する必要があります。

ただし、他のモデルをプロパティとして持つ新しいモデルを作成することをお勧めします。

于 2013-02-18T22:22:34.353 に答える
1

My.Models.Mod2問題のビューは、ではなくのみを渡すコントローラー アクションから呼び出されていTuple<My.Models.Mod1,My.Models.Mod2>ます。

このビューを呼び出す特定のコントローラー アクションを再確認してください。

アップデート

あなたのコントローラーコード

return View(model1,model2);

する必要があります

return View(new Tuple<My.Models.Mod1,My.Models.Mod2>(model1, model2>);

モデル 1 とモデル 2 をタプルとしてではなく、個別のパラメーターとして渡しています。

于 2013-02-18T21:58:34.100 に答える
1

次の両方を含むビュー モデルを構築します。

Public class CompositeViewModel{
 Public Mod1 mod1 {get;set;}
Public Mod2 mod2 {get;set}
}

次に、CompositeViewModel を作成してビューに渡します。CompositeViewModel をモデルとして使用するようにビューを設定する@model CompositeViewModel

タプルを使用しても、行っていることを簡単に拡張または変更することはできません。

データを持つ 1 つの ViewModel と、それに関連付けられIEnumerable<SelectListItem>た . その場合は、作成に必要なすべてのプロパティを含む CreateAnimalTypeViewModel のように ViewModel に名前を付け、さまざまな選択リストを用意します。

何かから ViewModel にマップする必要がある場合、たとえば、既存のアイテムの編集を行っている場合、AutoMapper を使用できます。

于 2013-02-18T23:34:46.027 に答える
0

ビューに送信する前にタプルインスタンスを作成していません。

public ActionResult Index()
{
    var model2 = new Mod2 { allHuman = allHumans() };
    var model1 = new Mod1();
    return View(new Tuple<Mod1,Mod2>(model1,model2));
}
于 2013-02-18T22:12:30.383 に答える