Asp.Net MVC中设计师友好的视图

Jac*_*itt 5 asp.net-mvc templates

我很享受Asp.Net MVC,我希望在即将到来的项目中使用它.然而,项目的一部分是强调能够将项目视图暴露给设计者以获取主题等内容.我期待的一个问题是Asp.Net MVC视图是以开发人员为中心的.我真的不想让设计师对<%vs. <%=的内部性进行教育,更不用说像<%foreach ...

以一个典型的MVC菜单结构为例.

<div id="menu">
 <ul>
      <li><%= Html.ActionLink("Home", "Index", "Main")%></li>
      <li><%= Html.ActionLink("About", "About", "Main")%></li>
      <li><% Html.RenderPartial("LogOnUserControl"); %></li>
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

我宁愿能够告诉设计师使用类似的东西

<div id="menu">
 <ul>
      <li>{ActionLink "Home", "Index", "Main"}</li>
      <li>{ActionLink "About", "About", "Main"}</li>
      <li>{Partial "LogOnUserControl"}</li>
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

要么

<div id="menu">
 <ul>
      <li><my:ActionLink text="Home" action="Index" controller="Main" /></li>
      <li><my:ActionLink text="About" action="About" controller="Main" /></li>
      <li><my:Partial name="LogOnUserControl" /></li>
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

是的,那最后看起来像一大堆UserControls.就个人而言,我不是真的使用UserControls来做这件事的粉丝只是因为这些控件的渲染几乎发生在其他所有事情之后(据我所知)并且我更喜欢更符合MVC生命周期的东西.我真正需要的是一组占位符和一种用相关渲染替换它们的方法.

那么哪里是最好的地方,我在这里看到了什么样的权衡.我可以想象出来的几个角度:

  • 一个自定义的ViewPage类,我可以覆盖相关的东西.也许是ViewPage.RenderView或ViewPage.FrameworkInitialize,但是你从那里得到的文字我不知道.
  • 创建一个自定义TextWriter并覆盖ViewPage.CreateHtmlTextWriter然后我可以拦截文本输出以替换东西.但是,这在周期中已经很晚了,如果我不小心的话,会混淆其他自定义过滤.
  • 创建我自己的IView和ViewEngine类.在我想知道自己是否会走向一个非常糟糕的地方之前,我没有走很远的路.
  • 自定义UserControls可以模仿所需的功能.

意见?其他选择?我自己的ViewEngine是我最好的选择吗?我自己的ViewPage?或者UserControl对象是否足够(请说不)?

Chu*_*way 5

看看Spark吧.它的语法与您的示例类似.