繁体   English   中英

如何根据正在执行的操作方法动态确定要使用哪个HTML“包装器”文件?

[英]How to dynamically determine which HTML 'wrapper' file to use based on the Action Method being executed?

我们有一个MVC应用,可将我们的内容注入到客户端提供的HTML包装中。

有多个包装,例如fund.html,share.html,factsheet.html和home.html。

包装器存储在我们的网络服务器上。 我们需要将包装器加载到Site.Master中,然后将内容注入到包装器的内容区域中,然后呈现页面。

基本上,我需要一些有关如何确定使用哪个包装器的建议。

起初,我以为我们可以将包装器映射到Controller。 因此,如果要在FundController上呈现视图,则可以使用包装器Fund.html,如果它是ShareController,则可以使用Share.html。 在由FundController和ShareController共同实现的BaseController中,我得到了Controller的名称,并使用它来加载文件,一切都很好。

但是随着需求的变化,显然这是行不通的,因为有时我们需要一个控制器来渲染使用不同包装器的不同视图。 因此,FundController现在可能必须呈现Fund.html和Factsheet.html。 现在,Controller不再直接映射到包装文件。

然后我以为可以使用Action名称而不是Controller名称来确定我应该使用的包装器。例如, public ViewResult Fund()对应于Fund.html, public ViewResult Factsheet()对应于Facthseet.html ,但这不是理想的方法,因为在BaseController中触发的方法将为我执行的所有操作方法(包括那些返回PartialViews和其他操作结果的方法)触发,而我不想为其加载包装器。 我只想要ViewResults的包装器。

因此,是这种情况,我想知道如何最好地确定要对我正在执行的ViewResult使用哪个包装器。 一种选择是使用“魔术字符串”,每执行给定的操作方法,它都会在BaseController中设置一个属性,该属性可用于确定要使用的包装器。.但是我不喜欢魔术字符串。 我宁愿避免使用骇人听闻的方法。

我也在考虑使用动作过滤器,该动作过滤器可以完成与该过滤器关联的任何操作方法相关联的包装器的加载工作。 但是在进行此操作之前,我想征询其他人的意见,这些人可能不得不处理以前与此类似的问题。 或者,如果有人可以建议采取更好的方法? 对我来说最好的方法是什么? 谢谢。

听起来您已经花了很多时间思考解决此问题的最佳方法。 也许只是结合您现有的想法:

  • 默认情况下,控制器和操作将根据约定检索其包装器。 FundController使用Fund.html包装器,而ShareController使用Share.html包装器。
  • 但也可以使用ActionFilter在每个动作的基础上重写包装器。

除非有其他需求更改(例如,在母版页中多个内容区域中的多个包装),这应该可以满足您的需求,不是吗?

我认为您的动作筛选器是一个选择,或者您可能想扩展自己的ViewEngine,后者负责决定何时使用包装器,何时不使用包装器。

希望这可以帮助...

我认为模仿观点规则可能会很好。 有一个在哪里查找视图的规则,但是您也可以在操作中声明视图名称。

令人高兴的是,开发人员拥有相同的规则集。

我不知道如何实现此功能,但我想它是可能的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM