Html.Action asp.net mvc - PullRequest
       5

Html.Action asp.net mvc

2 голосов
/ 17 сентября 2010

Я работаю над сайтом (Asp.net mvc), где у меня есть несколько частичных просмотров. Одним из представлений является информация о пользователе, а затем ниже есть несколько других представлений, в которых говорится о книгах пользователя, статьях в данной книге и т. Д., Именно так выглядит мой контроллер.

public class UserController : Controller
{

   public ActionResult UserInfo(long userid)
   {
        var model.User = LoadUser(userId);
        return View(model);
   } 

   public ActionResult Books(long userId)
   {
        var model.User = LoadUser(userId);
        model.Books = LoadBooks(userId);

        return View(model);
   } 

   public ActionResult Articles(long bookId)
   {
        var model.User = LoadUserByBookId(bookId);
        model.Book = LoadBook(bookId);
        model.Articles= LoadArticles(bookId);

        return  View(model);
   } 

} 

Я создал три частичных представления для UserInfo, Книги и Статьи и передаю данные из данного представления. Теперь вы можете видеть, что с каждым методом дела идут сложнее. Я читал о Html.Action помощник, который может загружать отдельные частичные представления. Но, как вы видите, мне нужно передать некоторые данные из помощника Html.Action в методы, чтобы он мог соответственно загружать данные, например, для загрузки userinfo, мне нужно будет передать userId.

Как мне добиться этого, используя этот или любой другой лучший метод. Помощь будет оценена.

С уважением Парминдер

Ответы [ 2 ]

2 голосов
/ 17 сентября 2010

В представлении Html.RenderAction () выполнит контроллер, а затем отобразит возвращенное представление как частичное. Вы можете использовать это так:

<%: Html.RenderAction("Articles", new { bookId = 3 }) %>

Первый аргумент «Articles» - это имя вашего метода действия, второй аргумент - это анонимный объект C #. Мы создаем свойство bookId и устанавливаем его равным 3. Это отобразит представление «Статьи», возвращенное из метода действия «Статьи», в текущее представление. Удачи!

1 голос
/ 17 сентября 2010

Мне кажется, что Ланс обеспечивает последний шаг этого решения. Очевидно, что если Html.RenderAction используется так, как он описывает, должно быть другое действие контроллера, которое уже было вызвано, поскольку теперь мы визуализируем действия (частичные представления) в увеличенном виде.

Мне кажется, что вам нужен ViewModel, который необходимо заполнить в действии основного контроллера

public class PageInfo
{
    public long UserId { get; set; }
    public long BookId { get; set; }
}

с основным действием

....
public ActionResult MainAction()
{
     // you probably have some logic here that gets the actual userid and bookid

     PageInfo theModel = new PageInfo(){UserId = 39894, BookId = 3};
     return View(theModel);
}

И затем при вызове RenderAction на MainAction странице

<%: Html.RenderAction("Articles", new { bookId = Model.BookId }) %>
<%: Html.RenderAction("UserInfo", new { userId = Model.UserId }) %>
<%: Html.RenderAction("Books", new { userId = Model.UserId }) %>
...