有人可以向我解释一下ASP.NET MVC吗?

时间:2010-11-01 16:21:42

标签: c# asp.net-mvc

我正在尝试进入MVC并且正在阅读wrox专业的ASP.NET MVC书。

我到目前为止得到了它。而不是每个URL进入页面它转到控制器。然后控制器操作获取数据并决定使用哪个视图。

我也明白,如果我有一个像/ product.aspx?id = 100这样的网址,那么控制器会得到产品详细信息并将它们与“show product”视图合并。

现在这里有点我不明白......

如果我的产品页面上有其他内容,例如登录框,“十大产品”部分,类别列表等可能会或不会在其他页面上使用,那么我将如何包含它们并保留它们代码分开?

在经典的aspx模型中,它很简单。如果我的前10个产品出现在每个页面上,那么我会将它放在母版页中,但如果它将用于某些页面而不是其他页面,我更有可能将其变为用户控件。

根据我对MVC的理解,到目前为止,我的产品控制器必须获得十大产品,因此任何其他控制器都会产生一个包含十大产品的页面。

混淆。请帮忙。

4 个答案:

答案 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局部视图与用户控件同义。不同的是母版页没有相应的控制器。你可以用两种方法解决。

  1. 使用局部视图时可以 传递模型。

    <%= Html.RenderPartial("PartialView",Model) %>
    
  2. 您可以使用代码括号<% %>
  3. 在局部视图中完成工作