加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC主页数据

发布时间:2020-12-16 07:21:41 所属栏目:asp.Net 来源:网络整理
导读:我使用ASP.NET MVC越多,我就越喜欢它.但是,在母版页上显示模型数据的情况下,似乎有几种方法可以实现.我不确定最好的解决方案. 我的例子是一个商业网站,我想在每个页面上输出产品类别列表,并显示访客购物车的状态. 在asp.net Web表单中,我通常会使用用户控件
我使用ASP.NET MVC越多,我就越喜欢它.但是,在母版页上显示模型数据的情况下,似乎有几种方法可以实现.我不确定最好的解决方案.

我的例子是一个商业网站,我想在每个页面上输出产品类别列表,并显示访客购物车的状态.

在asp.net Web表单中,我通常会使用用户控件执行此操作,每个用户控件都执行自己的数据绑定以检索所需的数据.

在MVC中,所有数据都应由控制器传递.

因此,对于类别,最简单的解决方案似乎是在控制器操作中的View数据中传递它:

ViewData["Categories"] = _service.GetCategories();

但是,为每个操作执行此操作并不是很干,因此在this article之后我创建了一个基本控制器,将所需数据添加到我的ViewData:

public class AppController : Controller
{
    IAppService _service;

    public AppController() { }
    public AppController(IAppService appService)
    {
        _service = appService;
        SetSiteData();
    }

    private void SetSiteData()
    {
        ViewData["Categories"] = _service.GetCategories();
    }
}

然后我为ViewMasterPage创建了一个扩展:

public static void RenderCategoryList(this ViewMasterPage pg) {
        pg.Html.RenderPartial("CategoryList",pg.ViewData["Categories"]);
    }

在我的MasterPage中:

<div>
        <%this.RenderCategoryList(); %>
    </div>

这似乎是一个非常干净的方法.但是,这是最好的方法,因为我也看到了为MasterPage创建ViewModel的建议.我可以看到,随着ViewModel数据的增长,这可能是一个更好的解决方案.

关于购物车状态,我想我会做类似的事情但不确定RenderAction是否更合适(When to use RenderAction vs RenderPartial with ASP.NET MVC).
谢谢,

解决方法

这是有效的,虽然这不是我做的方式有两个原因:

>我不喜欢将数据粘贴到ViewState中,因为您基本上将其作为对象进行投射
>通过要求基本控制器,您将功能限制为从此基本控制器继承的控制器(尽管可能不是问题)

我认为这将完美地使用RenderAction(MvcFutures项目的一部分).此帮助程序可用于在另一个控制器上呈现Action.所以你可能有一个带有ListCategories动作的ProductController,你可以这样做:

<% Html.RenderAction<ProductController>(x => x.ListCategories()); %>

ListCategories会调用

_service.GetCategories();

并可能将信息粘贴到自己的模型中.然后它会将该模型传递给View将是一个部分页面.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读