我正在一个网站(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,Books和Articles创建了三个部分视图,并从给定视图传递数据。现在你可以看到每种方法都变得更加复杂。我正在阅读有关Html.Action助手的内容,它可以加载单独的部分视图。但正如您所看到的,我需要将一些数据从Html.Action助手传递给方法,以便它可以相应地加载数据,例如加载userinfo,我需要传递userId。
如何使用此方法或任何其他更好的方法实现此目的。帮助将不胜感激。
此致 Parminder
答案 0 :(得分:2)
在视图中,Html.RenderAction()将执行控制器,然后将其作为部分返回视图。你可以像这样使用它:
<%: Html.RenderAction("Articles", new { bookId = 3 }) %>
第一个参数,“Articles”是你的action方法的名字,第二个参数是一个C#匿名对象。我们创建一个bookId属性并将其设置为3.这将从Articles操作方法返回的Articles视图呈现到当前视图中。祝你好运!
答案 1 :(得分:1)
在我看来,兰斯提供了这个解决方案的最后一步。显然,如果在描述时使用Html.RenderAction
,则必须有另一个已被调用的Controller Action,因为我们现在在更大的视图中渲染动作(部分视图)。
我认为你需要的是一个需要在主控制器动作中填充的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
页面内调用RenderAction
<%: Html.RenderAction("Articles", new { bookId = Model.BookId }) %>
<%: Html.RenderAction("UserInfo", new { userId = Model.UserId }) %>
<%: Html.RenderAction("Books", new { userId = Model.UserId }) %>