我正在尝试进入MVC并且正在阅读wrox专业的ASP.NET MVC书。
我到目前为止得到了它。而不是每个URL进入页面它转到控制器。然后控制器操作获取数据并决定使用哪个视图。
我也明白,如果我有一个像/ product.aspx?id = 100这样的网址,那么控制器会得到产品详细信息并将它们与“show product”视图合并。
现在这里有点我不明白......
如果我的产品页面上有其他内容,例如登录框,“十大产品”部分,类别列表等可能会或不会在其他页面上使用,那么我将如何包含它们并保留它们代码分开?
在经典的aspx模型中,它很简单。如果我的前10个产品出现在每个页面上,那么我会将它放在母版页中,但如果它将用于某些页面而不是其他页面,我更有可能将其变为用户控件。
根据我对MVC的理解,到目前为止,我的产品控制器必须获得十大产品,因此任何其他控制器都会产生一个包含十大产品的页面。
混淆。请帮忙。
答案 0 :(得分:4)
据我所知,MVC到目前为止, 我的产品控制器必须 获得前十大产品,所以会 任何其他控制器 产生前10名的页面 产品就可以了。
不一定。您可以将Master页面与MVC以及Partials一起使用来划分可重复使用的视图内容。
这是一篇关于使用Partials的好文章。 http://jeffreypalermo.com/blog/asp-net-mvc-and-the-templated-partial-view-death-to-ascx/
此外,在您的前10个产品示例中,您可以通过子操作呈现该内容:
[ChildActionOnly]
public ActionResult GetTopTenProducts()
{
var products = db.GetTopProducts(10);
return View(products);
}
然后,您将获得一个名为“GetTopProducts.ascx”的部分视图(.ascx),该视图将在您调用GetTopTenProducts()操作时呈现。然后在您的母版页面或您希望显示前10名列表的任何地方,您可以这样称呼它:
<% Html.RenderAction("GetTopTenProducts") %>
答案 1 :(得分:2)
你很亲密。
您只是忘记了您的控制器是一个可以从基类继承的类。
您可以创建一个基本控制器类来处理检索前十个产品,然后让任何需要该功能的控制器继承自基类。
然后创建一个母版页,该母版页使用局部视图渲染传递给视图的前十个产品(来自基本控制器)。
......瞧!没有代码重复。
答案 2 :(得分:1)
请不要忘记,在ASP.NET MVC中,您仍然可以使用MasterPage。特定于ASP.NET MVC 2,您可以使用RenderAction显示这10个产品,这些产品可以从您选择的任何Controller中呈现Action。
除此之外,您还应该了解PartialView。
答案 3 :(得分:1)
您可以使用母版页,而MVC局部视图与用户控件同义。不同的是母版页没有相应的控制器。你可以用两种方法解决。
使用局部视图时可以 传递模型。
<%= Html.RenderPartial("PartialView",Model) %>
<% %>
。