Asp.net mvc asp.net MVC-复杂示例?

Asp.net mvc asp.net MVC-复杂示例?,asp.net-mvc,views,Asp.net Mvc,Views,我们正在评估asp.NETMVC,并且正在寻找一些比NerdDinner更复杂的例子 具体来说,在更复杂的web应用程序中,我可能有一个导航栏(包括主导航、搜索框和登录状态显示)、一个主内容区域、一个子内容区域(包括相关内容)和一个页脚。在MVC中,控制器返回一个ViewModel(如果我认为我想将控制器与视图分离,则不是视图)——我的ViewModel是否必须具有属性来覆盖我要作为输出呈现的“页面”的每个方面 如果这一点不清楚,我可以重新回答我的问题 顺便说一句,我知道这个网站是用MVC构建的

我们正在评估asp.NETMVC,并且正在寻找一些比NerdDinner更复杂的例子

具体来说,在更复杂的web应用程序中,我可能有一个导航栏(包括主导航、搜索框和登录状态显示)、一个主内容区域、一个子内容区域(包括相关内容)和一个页脚。在MVC中,控制器返回一个ViewModel(如果我认为我想将控制器与视图分离,则不是视图)——我的ViewModel是否必须具有属性来覆盖我要作为输出呈现的“页面”的每个方面

如果这一点不清楚,我可以重新回答我的问题

顺便说一句,我知道这个网站是用MVC构建的。我在寻找可下载的例子


提前感谢。

欢迎您查看

上面有很多你想要的,但是还有工作要做!不过,在您看过之后,我很乐意在这里或codeplex上回答您的问题

这就是当前正在运行的功能。

请查看

编辑:关于您对视图模型的查询,这不是一个完美的答案,但我想提醒大家注意(由CodeCampServer使用),它可以帮助在模型和视图模型之间自动映射数据,这是一个实时节约。同样值得考虑的是输入构建器的概念(有一些在中提供,也有一些在中提供),它还可以通过封装所有通用功能来减少必须传递到视图中的数据量

这里有一个关于ASP.NET MVC 2产品的好视频:

我的ViewModel是否需要 属性以覆盖每个 “页面”方面,我的目标是 渲染为输出


对。RenderAction还有另一个选项,但除此之外,ViewModel通常都比较大,您必须找到一种填充它的好方法。首先,我承认这听起来像是个麻烦点。

是一个使用ASP.NET MVC编写的博客引擎。

据我所知,控制器直接返回视图,并可以使用ViewData或上下文将数据传递给视图

前者只是各种数据位的松散包,而后者是一种特定类型

ViewModel将作为上下文传递给视图(视图的标记将被强类型化为它所期望的ViewModel类型)


这就是我的2c值:)希望有帮助——很抱歉,我无法包含任何可下载的示例。

要自动将数据传递给所有视图,您可以创建自己的控制器类并使用它:

范例

    public class MyController : Controller

{
    private User _CurrentUser;

    public User CurrentUser
    {
        get
        {
            if (_CurrentUser == null)
                _CurrentUser = (User)Session["CurrentUser"];
            return _CurrentUser;
        }
        set
        {
            _CurrentUser = value;
            Session["CurrentUser"] = _CurrentUser;
        }
    }

    /// <summary>
    /// Use this override to pass data to all views automatically
    /// </summary>
    /// <param name="context"></param>
    protected override void OnActionExecuted(ActionExecutedContext context) 
    {
        base.OnActionExecuted(context);

        if (context.Result is ViewResult) 
        {
            ViewData["CurrentUser"] = CurrentUser;
        }
    }
    }
公共类MyController:Controller
{
私人用户_CurrentUser;
公共用户当前用户
{
得到
{
if(_CurrentUser==null)
_CurrentUser=(用户)会话[“CurrentUser”];
返回当前用户;
}
设置
{
_当前用户=值;
会话[“当前用户”]=\u当前用户;
}
}
/// 
///使用此替代将数据自动传递到所有视图
/// 
/// 
受保护的覆盖无效OnActionExecuted(ActionExecutedContext上下文)
{
base.OnActionExecuted(上下文);
if(context.Result是ViewResult)
{
ViewData[“CurrentUser”]=当前用户;
}
}
}
给你:

<% Html.RenderAction<LayoutController>(c => c.SearchBox()); %>
<% Html.RenderAction<LayoutController>(c => c.NavBox(Model)); %>
c.SearchBox());%
c、 导航框(型号));%%>
将它们放在母版页或边栏小部件的特定视图中,并将它们的逻辑从正在处理的控制器/视图模型中抽象出来。它们甚至可以读取当前RoutedData(url/action)和ControllerContext(参数/模型),因为您正在处理这些对象中的环境值,并执行完整的ActionMethod请求

。我也在博客中提到了它的位置,这是一个独立于微软的附加组件

史蒂夫·桑德森(Steve Sanderson)在我的一本书中给出了复杂逻辑和应用程序构建的例子(我知道,这是无耻的插件,但这正是你在问题中寻找的),他在书中实际使用了渲染!我在读这本书之前就写了这篇博文,所以我很高兴我们在同一页上

事实上,ASP.NET MVC团队开发了几十个扩展和功能,而这些扩展和功能被排除在ASP.NET MVC 1.0项目之外,其中大多数使复杂项目更易于管理。这就是为什么更复杂的示例(在大多数人的回答中列出)必须使用某种类型的自定义ViewEngine,或者使用一些带有基本控制器和自定义控制器的大型跳跃。我看过上面列出的几乎所有开源版本

但归根结底,这并不是看一个复杂的例子,而是知道如何实现你想要的复杂逻辑——比如当你只有一个控制器中的ViewModel需要处理时,你的导航栏。必须将导航栏绑定到每个ViewModel会很快变得很累

因此,一个例子是Html.RenderAction()扩展(如我开始所述),它允许您将更复杂/抽象的逻辑从viewmodel/controller中移出(您甚至不关心它),并将它放在它所属的控制器操作中

这个小宝宝为我保存了MVC,特别是在我目前正在从事的大型企业项目上


您可以将viewmodel传递到RenderAction中,或者只渲染任何类似页脚或页眉区域的内容,并将逻辑包含在这些操作中,在这些操作中,您可以直接触发并忽略(编写渲染,并忽略它对页眉或页脚的作用)。

stackoverflow.com是在ASP.NET MVCThanks David中构建的,我知道。当我说“示例”时,我在寻找可下载的示例,而不仅仅是使用MVC的复杂(ish)站点的名称