ASP .NET MVC正确的用户控件架构
-
22-08-2019 - |
题
我想学习新的ASP.NET MVC框架,很想知道使用UserControls的最佳做法。
我明白你可以呈现用户控件的作为部分以及来自控制器的数据传递到它们。理想情况下,我觉得它有道理不具有隐藏文件代码,因为这将创建一个诱惑打破了MVC的规则。
我给一个例子,其中我不理解的UserControls如何适应模式。
我有一个用户控件,显示 最新的标签(很像 堆栈溢出)。不像StackOverflow的我 要显示在此用户控件 我的所有网页的。如果我有一个 控制器说QuestionController 其目的是要处理来自行动 一些问题的看法例如视图 细节,这是否意味着我必须取 在QuestionController的数据,并 然后将它传递到该用户控件?
如果我创建另一个控制器说 SearchController那么我将不得不 复制相同的功能, 获得最新的代码传递到 再次部分。这难道不意味着 在2个不同的控制器操作的方式 多余的东西,他们不 原本打算做什么?
解决方案
如果您的用户控件出现在每一页上,然后以处理这将是通过重写OnActionExecuting方法和把逻辑有使用碱控制器从其中所有的控制器的推导,并生成用于ViewData的用户控件的一种方式。如果你的用户控件是那么普遍,但是整个网站仍然经常使用,可以扩展ActionFilterAttribute和你的过滤器生成所需的数据。该属性可以被用于装饰该生成使用该用户控件视图的控制器或动作。
我在所有的这假设用于该用户控件的数据是独立的被调用的动作。如果存在依赖关系,它可能是最好的逻辑推入一个类(或多个类,可能使用策略),并在每个动作或控制器显式的数据的生成(通过重写OnActionExecuting)。
其他提示
可替换地,使用ASP.NET MVC 2现在可以使用的RenderAction调用一个完全新的控制器动作可以获取数据。这使你的代码更加模块化,更明确了数据的来源。
您也可以考虑把你的模型类在层次结构。上层(或上层中的一个)将包含必要的数据为您的普适用户控件。然后,你可以在碱控制器类加载这些常用的数据。