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

有问题的视图是从只传入 aMy.Models.Mod2而不是 a的控制器动作调用的Tuple<My.Models.Mod1,My.Models.Mod2>

仔细检查调用此视图的特定控制器操作。

更新

您的控制器代码

return View(model1,model2);

应该

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

您将 model1 和 model2 作为单独的参数而不是作为元组传递。

于 2013-02-18T21:58:34.100 回答
1

每个视图只能有一个模型。您需要按照 Ufuk 的建议实例化元组。

但是,我建议创建一个将其他模型作为属性的新模型。

于 2013-02-18T22:22:34.353 回答
1

构建一个包含两者的视图模型:

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

然后构造并传递 CompositeViewModel 到视图。设置视图以使用 CompositeViewModel 作为模型@model CompositeViewModel

使用元组并不容易让您扩展或更改您正在做的事情。

甚至看起来你有一个 ViewModel 有数据,然后是一些关联IEnumerable<SelectListItem>的 . 如果是这种情况,则将 ViewModel 命名为 CreateAnimalTypeViewModel,其中包含创建它所需的所有属性,然后有各种选择列表。

如果您需要从某物映射到 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 回答