2013-06-23 3 views
0

У меня есть страница, которая отображает отфильтрованную таблицу на основе пользователя, который передается на страницу. Я также хочу отображать информацию пользователя в верхней части страницы, но это происходит из другой таблицы (из модели учетной записи). Есть ли способ получить доступ к полям из этой таблицы во время работы в моем другом контроллере/представлениях?Доступ к полю из таблицы модели differen't в ASP.NET MVC

Вот мой код:

@{ 
    ViewBag.Title = "User Profile"; 
} 

@model IEnumerable<FTv2.Models.Trade> 

@{ 
    ViewBag.Title = "Active Trades"; 
    ViewBag.ImgUrl = ViewBag.Name + ".png"; 
} 


<h2>@ViewBag.User's Profile:</h2> 
<p> 
    // This is where I would like to put the User info. 
</p> 
<h2>Active Trades:</h2> 
<p> 

</p> 
<table> 
    <tr> 
     <th> 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Name) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Price) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.User) 
     </th> 
     <th></th> 
    </tr> 

@foreach (var item in Model) 
{ 
    if (item.User == ViewBag.User) 
    { 
    <tr> 
     <td> 
      @{ViewBag.ImgUrl = @item.Name + ".png";} 
     <a href="/Images/@ViewBag.ImgUrl"><img src="/Images/@ViewBag.ImgUrl" HEIGHT="66" WIDTH="50" ></a> 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Name) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Price) TE 
     </td> 
     <td> 
      <a href="/ActiveTrades/@item.User">@Html.DisplayFor(modelItem => item.User)</a> 
     </td> 
     @{if (ViewBag.User == User.Identity.Name){ 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id = item.ID }) | 
      @Html.ActionLink("Details", "Details", new { id = item.ID }) | 
      @Html.ActionLink("Delete", "Delete", new { id = item.ID }) 
     </td> 
     }} 
    </tr> 
    } 
} 

</table> 

ответ

0

Есть два варианта, которые я могу думать:

  1. Рендер метод действия, который возвращает информацию о пользователе

    @ {

    Html.RenderAction("UserDetails", new { UserID = ViewBag.UserID}); 
    

    }

  2. Создайте новую модель, в которой есть сведения о пользователе, а также IEnumerable из торгов и используйте это для своего вида.

+0

Спасибо за ваш ответ, не могли бы вы немного рассказать о том, как я буду использовать визуализацию? Предположим, я хочу вывести запись для поля «FID» для определенного пользователя, как бы я это сделал? – kgst

+0

Вы должны создать другое действие на вашем контроллере, который ожидает параметр userID (или как вы его называете). Это действие создает модель деталей пользователя и передает ее в представление для рендеринга. Подумайте об этом как о представлении в представлении. – ScottE

0

Я полагаю, что вы хотите

  • страницу модели грим, который будет содержать информации о пользователе и IEnumerable<...>.
  • или передать данные пользователя в ViewBag
  • или позвоните @Html.RenderAction()

Я думаю, что вы должны иметь в виду возможность повторного использования класса вид модели. Если вы не видите способа повторного использования модели, используйте ViewBag для передачи информации в представление. В действии контроллера установите свойство ViewBag.UserInfo = userInfo; и в вызове просмотра: code @ Html.Partial ("_ UserInfo", (UserInfo) ViewBag.UserInfo) code. Но более практичным способом является вызов @ Html.Action(): 1. Сделайте действие UserController.UserInfo (int id). 2. Вызовите из своего вида @ Html.Action («UserInfo», «User», new {Id = ViewBag.UserId}); 3. Создайте частичный вид действия UserController.UserInfo.

+0

Извините, что я довольно новичок в этом и с большим трудом понимаю, что мне нужно делать. Не могли бы вы объяснить, что мне нужно сделать немного точнее? Должен ли я создать совершенно новую страницу model.cs, или если не на какой странице я должен поставить новую модель? – kgst

+0

Я обновил свой ответ. – user2452329

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