在mvc中禁用或不禁用按钮的逻辑

时间:2010-04-16 03:45:09

标签: asp.net-mvc design-patterns

以下是我正在阅读的关于MVC应用程序设计的一本书的摘录:

  

理想情况下,视图非常简单   无逻辑,几乎不需要   测试。用户(和开发人员之前   用户)可以合理地测试视图   只是看着上面的像素   屏幕。除了纯粹的任何其他东西   理想情况下,图形渲染应该是   从视图中取出并放入   控制器和型号。这个   包括,,例如,逻辑   确定是否有某个按钮   应启用或显示为灰色   某点。

大胆的陈述对你意味着什么?这会是什么样的?

感谢, 杆

2 个答案:

答案 0 :(得分:1)

这是大胆的陈述对我意味着什么:

  • 控制器将充满嵌套的if语句
  • 模型(或视图模型)将充满属性,以帮助呈现页面特定的方式,使对象图难以维护。

虽然我认为不应该在视图中进行分析,但应该设置条件,以便按钮只需要思考 - 显示或不显示。

例如。如果考生是男性,则仅显示考生详细信息按钮。

您要么创建一个viewmodel属性ShowExamineeDetails。该视图将检查这是否真的。

ShowExamineeDetails =是考生马?

代码应该在控制器中。

至于测试,我还没有找到一个“......几乎不需要测试......”的应用程序。

答案 1 :(得分:1)

决定何时启用或禁用按钮的逻辑应该驻留在控制器中,只需调用一个方法,例如 view.EnableContinueButton()来启用/禁用页面上的按钮。

启用/禁用页面本身按钮的实际代码应该在视图中实现,例如 EnableContinueButton()方法然后调用类似 btnContinue.Enable()的方法

简单地说,视图应该关注UI细节(显示/隐藏/启用/禁用UI元素)并将所有业务逻辑处理留给控制器。通过这种方式,控制器不需要关注UI元素,并且视图独立于实际业务逻辑而工作。

例如在Controller中,

public void ProcessOrder()
{
   if (!controller.ValidateOrder(model.OrderNo))
       view.EnableContinueButton(false);
   else
       // Process the order
       ...
}

并在视图中

public void EnableContinueButton(bool enabled)
{
    btnContinueButton.Enabled = enabled;
}

坦率地说,我在MVC方面没有太多经验(不久前在一个项目中实现),但我希望控制器和视图之间的逻辑分离足够清晰。