gpt4 book ai didi

c# - ASP.NET 主页是否应该从 View 中获取数据?

转载 作者:太空狗 更新时间:2023-10-30 01:12:25 26 4
gpt4 key购买 nike

我一直在使用 ASP.NET MVC 和一个包含母版页的站点。

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

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

}

I read a blog entry这显示了用户控件如何使用 ViewData。我了解到用户控件可以自动从父 View 获取其模型。由于它使用相同的数据,因此 View 不需要将任何内容显式传递给用户控件,从而使标记和代码更加清晰。

现在我了解到母版页使用与页面相同的 ViewData。这意味着母版页本身并没有真正帮助呈现自身的模型。

问题

母版页首先获取其数据的正确方法是什么?

我想过尝试以下方法吗?

你可以有一个 SiteModel :

//Arbitrary properties for example
class SiteModel
{
public string PartnerId {get; set;}
public ShoppingCart ShoppingCartContents {get; set;}
public string CurrentUserId {get; set;}
}

View继承自它:

class ViewProductModel : SiteModel 
{
public Product Product {get; set;}
}

SiteModel 将被母版页使用。如果需要, View 可以使用其中的数据 - 如果它们需要在某处显示当前用户的电子邮件。

这是一个可怕的想法吗?

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

如果我想在 masthead 中包含用户控件怎么办?

既然整个页面只有一个 ViewData 对象,它会从哪里得到它的 ViewData

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

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

解决这种情况的最佳方法是什么?

最佳答案

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

这确实有一个缺点,即母版页的 View 数据不像模型对象那样是强类型的,但它对我们来说非常有效。

你的想法也不错。由于母版页的想法类似于继承的想法,为什么不使用继承来设置模型对象。您可以更进一步,创建一个模型工厂来生成您的模型对象并设置基类数据。

关于c# - ASP.NET 主页是否应该从 View 中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/467855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com