[英]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.