2014-01-24 3 views
0

Я новичок в MVC C# и все еще изучаю основы.Несколько моделей в одном представлении

Я думаю, что я близок к получению результата, но компилятору это не нравится.

Я пытаюсь передать 2 модели в основной вид. Я подумал, что я смогу использовать частичный вид для хранения одной модели, а главное - использовать другую. Например ...

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

Pictures/Index получит модель картин и _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") 

Но, похоже, столкновение с Picture.cs в Html.Partial ("_ PictureUp load ") и Users.cs в Html.Partial (" _ Login ")

Как можно иметь модель изображения и пользователя в одном представлении? Надеюсь, я достаточно подробно объяснил свою проблему.

Пожалуйста, держите его как можно проще, я просто пытаюсь понять, как это работает.

+0

где в вашем 'picture/index.cshtml' вы вызываете свой логин? Какую модель занимает «Pictureupload»? – Jonesopolis

+0

На самом деле его вызывают в _Layout.cshtml, так как я хочу, чтобы вход на всех страницах. Я думаю, что на самом деле, думая об этом, загрузка изображения займет класс пользователя и класс изображения. - PSEUDO CODE - Если НЕ вошел в систему, войдите в систему (используйте класс пользователя), если он включен в систему. Класс изображения (чтобы принимать данные изображения) Правильно ли это делается? – Ultigma

+0

проверить мой ответ – Jonesopolis

ответ

0

Вы не можете передать две модели в один и тот же вид. Если вы хотите сделать то, что вы пытаетесь сделать, вам нужно включить одну из ваших моделей в качестве свойства в родительскую модель. Затем в родительском представлении укажите родительскую модель. И когда вы дойдете до той части представления, которую хотите включить в свою детскую модель, вы можете позвонить @Html.Partial("YourPartialViewName", Model.ChildModal).

В качестве модели для частичного представления с именем «YourPartialViewName» следует передать дочерний модальный код. Это также обеспечит правильную привязку модели, когда вы отправляете свое действие на контроллер.

0

Вы пытались создать новую модель с двумя свойствами по одной из тех моделей, которые вы хотите?

Однако, если вы хотите иметь модель в вашем Частичный вид вам нужно передать его, пожалуйста, обратитесь к этому http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.partialview(v=vs.118).aspx

0

Вы должны либо передать модель в частичное, имея его как часть основной вида по модели:

@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); 
} 
0

вы не будете льда, что в вашем входе в систему частичного, вы никогда не ссылаться:

@Model... 

Вы на самом деле даже не с помощью пользователя модели для чего-нибудь в вашем входе в систему частичной. И вы не должны быть - вам придется передать модель на каждую страницу, что было бы ужасно. Поэтому просто удалите инструкцию using, и вы на самом деле все настроены. Но что касается двух моделей, то другие ответы правильны.

+0

Не ссылаюсь на него, используя ** u => u.Email ** и ** u => u.Password **? Если я удалю @model Project1.Models.User, он даст мне ошибку – Ultigma

+0

К сожалению, да. Но зачем? Они просто будут пустыми текстовыми полями, и это все, что вам нужно. – Jonesopolis

+0

Я использовал его, чтобы передать отправленные пользователем данные контроллеру, который будет проверять отправленные данные, а затем посмотреть, было ли это совпадением в базе данных. Или мне это совсем не нужно? – Ultigma

Смежные вопросы