.net www.example. com MVC -复杂的例子?

1dkrff03  于 2023-05-02  发布在  .NET
关注(0)|答案(7)|浏览(106)

我们正在评估 www.example.com MVC,并且正在寻找一些比NerdDinner更复杂的例子。
具体来说,在一个更复杂的web应用程序中,我可能会有一个导航栏(包括主导航,搜索框和登录状态显示),一个主内容区域,一个子内容区域(包括相关内容)和一个页脚。在MVC中,一个控制器返回一个ViewModel(如果我想把我的Controller从我的View中分离出来,那么就不是一个View)--我的ViewModel是否必须有属性来覆盖我想要呈现为输出的“页面”的每个方面?
如果这一点不清楚,我可以重新提出我的问题。
顺便说一句,我知道这个网站是用MVC构建的。我在寻找可下载的例子。
先谢谢你了。

1hdlvixo

1hdlvixo1#

看看CodeCampServer

**编辑:**关于你对视图模型的查询,这不是一个完美的答案,但我想我会提请注意AutoMapper(由CodeCampServer使用),它可以帮助自动Map模型和视图模型之间的数据,这是一个真实的节省。同样值得考虑的是Input Builders的概念(MVCContrib中有一些,ASP.NET MVC 2中也有一些),它还将通过封装通用功能来减少必须传递到视图中的数据量。

ASP上有一个很好的视频。NET MVC 2提供:http://channel9.msdn.com/posts/Glucose/Hanselminutes-on-9-ASPNET-MVC-2-Preview-1-with-Phil-Haack-and-Virtual-Scott/

hec6srdp

hec6srdp2#

给你:

<% Html.RenderAction<LayoutController>(c => c.SearchBox()); %>
<% Html.RenderAction<LayoutController>(c => c.NavBox(Model)); %>

把这些放在你的母版页中,或者放在侧边栏小部件的特定视图中,把它们的逻辑从你正在处理的控制器/视图模型中抽象出来。它们甚至可以读取当前的RouteData(url/action)和ControllerContext(parameters/models),因为您正在处理这些对象中的环境值-并执行完整的ActionMethod请求!
I blogged about this little known secret here。我还写了博客,关于它的位置,这是ASP.NET 1.0 MVC Futures assembly,是一个独立的附加从微软。
Steve Sanderson实际上给出了复杂逻辑和应用程序构建的例子,我称之为Pro ASP.NET MVC(无耻的插件,我知道,但它是你在你的问题中寻找的),在那里他实际上使用了RenderAction!我写了这篇博客,在我读这本书之前,所以我很高兴我们在同一页上。
实际上,有几十个扩展和功能,是由ASP。NET MVC团队被排除在ASP。NET MVC 1.0项目-其中大部分使复杂的项目更易于管理。这就是为什么更复杂的例子(在大多数人的答案中列出)必须使用某种类型的自定义ViewEngine,或者一些带有基础控制器和自定义控制器的大跳跃。我已经看过上面列出的几乎所有开源版本。
但归根结底不是看一个复杂的例子,而是知道如何实现你想要的复杂逻辑--比如你的导航栏,当你只需要在一个控制器中处理一个ViewModel时。它很快就会让你的导航栏绑定到每个ViewModel。
其中一个例子就是Html。RenderAction()扩展(正如我开始时所做的那样),它允许您将更复杂/抽象的逻辑从视图模型/控制器中移走(在那里它甚至不是您所关心的),并将其放置在自己的控制器操作中。
这个小宝贝为我保存了MVC,特别是在我目前正在做的大型企业项目中。
你可以将你的viewmodel传递到RenderAction中,或者只是渲染Footer或Header区域- ,让逻辑包含在那些动作中,你可以直接触发并忘记(编写RenderAction,忘记它对页眉或页脚做了什么)

qnyhuwrf

qnyhuwrf3#

欢迎您访问good.codeplex.com
它有很多你在上面寻找的东西,但还有工作要做!然而,在你看过之后,我很乐意在这里或在codeplex上提出问题。
这就是mygoodpoints.org当前运行的环境。

km0tfn4u

km0tfn4u4#

我的ViewModel是否必须有属性来覆盖我想要呈现为输出的“页面”的每一个方面?
是的。RenderAction还有另一个选项,但除此之外,ViewModel通常很大,你必须找到一个好的方法来填充它。我承认这首先听起来像是个麻烦点。

avwztpqn

avwztpqn5#

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

jucafojl

jucafojl6#

据我所知,Controller直接返回一个View,并可以使用ViewData或Context将数据传递给View。
前者只是各种数据位的松散包,而后者是一种特定类型。
ViewModel将作为Context传递给View(并且View的标记将被强类型化为它期望的ViewModel类型)。
这是我的2c值:)希望这有帮助-抱歉我不能包括任何可下载的例子。

eqzww0vc

eqzww0vc7#

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

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;
        }
    }
    }

相关问题