我是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”)发生冲突
如何在同一视图中显示图片和用户模型?希望我已经解释了我的问题,足以理解。
请保持尽可能简单,我只是想了解它现在如何运作的概念。
答案 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语句即可实际完成所有设置。但就两个模型而言,其他答案都是正确的。