单个视图中的多个模型

时间:2014-01-24 16:22:37

标签: c# asp.net asp.net-mvc model

我是MVC C#的新手,还在学习基础知识。

我认为我接近获得结果,但编译器不喜欢它。

我试图将2个模型传递到主视图中。我以为我可以使用局部视图来存储一个模型,而主视图可以使用另一个模型。例如......

// GET: /Pictures/
public ActionResult Index()
{
    //Retrieve all pictures from database
    var pictures = db.Pictures.ToList();
    return View(pictures);
}

图片/索引会收到图片模型,_Login会收到用户模型

@model Project1.Models.User

<div id="login">
    @if (this.Context.User.Identity.IsAuthenticated)
    {
        //Select username from email address cookie


        @Html.ActionLink("My Account", "Index", "Users", new { id = this.Context.User.Identity.Name }, false) @: | @Html.ActionLink("Logout", "Logout", "Users") 
        //
    }
else
{
    using (Html.BeginForm("Login", "Users"))
    {
        <span>
            @Html.LabelFor(u => u.Email)
            @Html.TextBoxFor(u => u.Email)
        </span>

图片/ index.cshtml如下

@model IEnumerable<Project1.Models.Picture>
@{
    ViewBag.Title = "Animal Pictures";
}

@Html.Partial("_PictureUpload") //I thought the model would be local to _PictureUpload and then be passed?

<div id="gallery">
    @foreach (var picture in Model)
    {
        @picture.File
    }
</div>
@Html.Partial("_PictureUpload")

但似乎与Html.Partial(“_ PictureUpload”)中的Picture.cs和Html.Partial中的Users.cs(“_ Login”)发生冲突

如何在同一视图中显示图片和用户模型?希望我已经解释了我的问题,足以理解。

请保持尽可能简单,我只是想了解它现在如何运作的概念。

4 个答案:

答案 0 :(得分:0)

您无法将两个模型传递到同一视图。如果您想要执行您要执行的操作,则需要将其中一个模型作为父模型的属性。然后在父视图中引用父模型。当您到达视图的一部分时,您想要包含您的子模型,那么您可以调用@Html.Partial("YourPartialViewName", Model.ChildModal)

应将子模态作为名为“YourPartialViewName”的部分视图的模型传递。当您提交控制器操作时,这将允许正确的模型绑定。

答案 1 :(得分:0)

您是否尝试使用您想要的每个模型中的两个属性制作新模型?

但是,如果您想要在部分视图中使用该模型,则需要将其传递,请参阅此http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.partialview(v=vs.118).aspx

答案 2 :(得分:0)

您必须将模型作为主视图模型的一部分传递给Partial:

@model AMoreComplexModelThatHasAListOfPictureAndAPictureUploadViewModel
@{
ViewBag.Title = "Animal Pictures";
}

@Html.Partial("_PictureUpload", Model.PictureUploadViewModel)

<div id="gallery">
@foreach (var picture in Model.Pictures)
{

或者,您可以将partial渲染为动作,并让动作为其检索/构建模型:

@model IEnumerable<Project1.Models.Picture>
@{
ViewBag.Title = "Animal Pictures";
}

@Html.RenderAction("PictureUpload");



public ActionResult PictureUpload()
{
    var model = GetMyPictureUploadViewModel();
    return PartialView("_PictureUpload", model);
}

答案 3 :(得分:0)

您会注意到,在您的登录部分中,您从未参考:

@Model...

您实际上甚至无法将您的用户模型用于登录部分中的任何内容。并且你不应该 - 你必须为每一页传递模型,这将是非常糟糕的。所以只需删除using语句即可实际完成所有设置。但就两个模型而言,其他答案都是正确的。