这是在我们的一项回顾期间出现的,并希望获得一些其他反馈和点检查。目前,我们有许多根据布尔标志启用/禁用的视图(model.isnew是一个示例)。我认为,视图应该尽可能简单,控制器应确定该视图的数据,而不一定是其工作原理。我认为,部分或完整的视图应为-told-要做什么并处理该视图,而不是确定应显示/隐藏的内容。一个非常基本的例子如下,但涵盖了这两面,主要是我们所拥有的...

控制器具有一对方法(POST/GET),称为详细信息。 [GET]详细信息具有单个参数,ID和[POST]详细信息为ID和ViewModel。在帖子中,该方法是约30行的长度检查有效模型,确定其新的新值是否更改(触发重定向)等(我认为这是不正确的)。 [获取]详细信息检查空ID,填充必要的下拉列表,没有任何幻想(我认为这是正确的)。细节视图本身包含一小部分逻辑:if(!model.isnew){renderAction(history => history.show(id);}(我认为这是不正确的,该节目应该知道显示什么,不管它是新的)。这是该详细信息的布局,这是两次的布局。详细信息/添加几乎是相同的,根据状态,一些残疾字段(也许应该是部分?) - 实体 - 可以禁用/删除,使值可以编辑或不编辑。

思想,意见,见解?

有帮助吗?

解决方案

为什么不创建多个视图和动作?

Details

Edit
[HttpPost]
Edit

Create
[HttpPost]
Create

然后他们可以共享模型对象

public ThingModel
{
    public Thing Thing { get; set; }
}

或让创建和编辑操作使用更安全的(防止HTML注入)模型,该模型还可以让您使用内置的验证选项。

public ThingEditorModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Value { get; set; }
    public bool IsNew { get { return Id == 0; } }
}

然后,对于编辑和创建,您可以创建一个editortemplate(共享/editorplates/thiteeditor.ascx),创建和编辑可以共享

其他提示

我认为您在正确的轨道上...使用“主”视图进行布局,然后使用模板的助手作为“逻辑”。依靠html.displayfor(x => x.thing)和editorfor

您绝对不希望在两个地方布局。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top