Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET母版页是否应从视图中获取其数据?_C#_.net_Asp.net Mvc - Fatal编程技术网

C# ASP.NET母版页是否应从视图中获取其数据?

C# ASP.NET母版页是否应从视图中获取其数据?,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,我一直在用ASP.NETMVC玩一个包含母版页的网站 我创建了一个名为ProductThumbnailControl的MVC用户控件。用户控件显示一个产品和一个小缩略图。该视图是一个ViewProduct视图,显示完整的产品信息-用户控件只是站点的一个UI元素 public partial class ProductThumbnailControl : System.Web.Mvc.ViewProductControl<ViewProducts

我一直在用ASP.NETMVC玩一个包含母版页的网站

我创建了一个名为
ProductThumbnailControl
的MVC用户控件。用户控件显示一个产品和一个小缩略图。该视图是一个
ViewProduct
视图,显示完整的产品信息-用户控件只是站点的一个UI元素

 public partial class ProductThumbnailControl :
                      System.Web.Mvc.ViewProductControl<ViewProductsModel>
 {

 }
视图继承自它:

class ViewProductModel : SiteModel 
{
    public Product Product {get; set;}
}
SiteModel
将被母版页使用。如果需要,视图可以使用其中的数据——如果它们需要在某处显示当前用户的电子邮件

这是一个可怕的想法吗

母版页是否应该从任何需要的地方获取数据

如果我想在
报头中包含一个用户控件,该怎么办

由于whle页面只有一个
ViewData
对象,它从何处获取其
ViewData

我是否必须使用我讨厌的这种可怕的语法,并向母版页的用户控件传递一个显式模型

Html.RenderUserControl("~/Views/Account/UserControls/Header.ascx",
  null, new { SelectedItem = "Profile" })

解决此问题的最佳方法是什么?

我们的母版页从视图中获取数据。我们在视图中使用,在该实现的方法中,我们还添加了标准视图数据,每个页面都需要来自持久对象的数据(如应用程序菜单结构信息、要在屏幕上显示的用户信息等)

这样做的缺点是母版页的视图数据不像模型对象那样是强类型的,但对我们来说效果很好


你的想法也很好。由于母版页的思想与继承的思想类似,为什么不使用继承来设置模型对象呢。您可以更进一步,创建一个模型工厂,在创建模型对象的同时设置基类数据。

看起来我的解决方案与Microsoft的建议非常相似,但有一个关键的例外。我创建了一个ViewData基类,他们创建了一个控制器基类——这更有意义

然而,这两种想法似乎可以(也应该)协同工作。下面的MS教程使用字典来存储视图数据,因此,如果您有强类型模型,还需要一个基类来存储


我将创建一个ShoppingCart控制器(或每个关注点的单独控制器),并将使用它们的用户控件与可从www.codeplex.com/asp.net下载的Futures DLL中的RenderAction一起呈现。它是ASP.NET MVC源代码的一部分


使用基本控制器或“站点模型”将太多的事情耦合在一起,造成了一场测试和维护噩梦。

感谢您的输入。这对我来说是新的-我指的是“asp.NETMVC方式”。我几乎只是问“母版页应该如何获取其数据?”但想深入研究一下。是否可以选择进行一些ajax调用以获取$(文档)中的额外信息。准备好了吗?这将使它过于依赖javascript,我想这只是伪装的渲染;)@变形-听起来有点吓人!努力使基础工作干净利落。对于我所拥有的真正的问题,会有很多机会让我发疯——而不是所有这些无数的小学习曲线的颠簸
Html.RenderUserControl("~/Views/Account/UserControls/Header.ascx",
  null, new { SelectedItem = "Profile" })