代码之家  ›  专栏  ›  技术社区  ›  Parminder

Html.操作asp.netmvc公司

  •  2
  • Parminder  · 技术社区  · 14 年前

    我在一个网站上工作(Asp.netmvc),其中我有多个局部视图。其中一个视图是用户信息,下面还有一些其他视图,比如用户的书、给定书中的文章等等。这就是我的控制器的样子。

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

    如何使用这个或其他更好的方法来实现这一点。我们将不胜感激。

    当做 帕明德

    2 回复  |  直到 14 年前
        1
  •  1
  •   Ahmad    14 年前

    在我看来,兰斯提供了这个解决方案的最后一步。显然,如果 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);
    }
    

    然后在调用 MainAction 页码

    <%: Html.RenderAction("Articles", new { bookId = Model.BookId }) %>
    <%: Html.RenderAction("UserInfo", new { userId = Model.UserId }) %>
    <%: Html.RenderAction("Books", new { userId = Model.UserId }) %>
    
        2
  •  2
  •   Lance Fisher    14 年前

    从某种角度来看,Html.RenderAction文件()将执行控制器,然后将其返回的视图呈现为部分视图。你可以这样使用它:

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

    第一个参数“Articles”是操作方法的名称,第二个参数是C#匿名对象。我们创建一个bookId属性并将其设置为3。它将把从Articles操作方法返回的Articles视图呈现到当前视图中。祝你好运!