繁体   English   中英

单一视图中的多个模型

[英]Multiple Models in a single View

我是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(“ _ Login”)中的Users.cs发生冲突

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

请使其尽可能简单,我只是试图了解它目前的工作方式。

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

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

您是否尝试过创建具有两个属性的新模型,而每个模型都需要其中一个?

但是,如果要在部分视图中使用模型,则需要通过它,请参考此http://msdn.microsoft.com/zh-cn/library/system.web.mvc.controller.partialview(v= vs.118).aspx

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

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

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

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

或者,您可以将局部渲染为一个动作,并让该动作为其检索/构建模型:

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

@Html.RenderAction("PictureUpload");



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

您会注意到,在登录部分中,您永远不会引用:

@Model...

实际上,您甚至在登录部分中甚至都没有使用用户模型。 而且您不应该-您必须为每个页面传递模型,这太糟糕了。 因此,只需删除using语句,您实际上已经准备就绪。 但是就两个模型而言,其他答案是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM