1

这是在我们的一次回顾中提出的,需要一些额外的反馈和抽查。我们目前有许多基于布尔标志启用/禁用的视图(Model.IsNew 就是一个例子)。我认为视图应该尽可能简单,控制器应该确定该视图的数据,而不一定是它的工作方式。我认为视图,部分或全部,应该 - 告诉 - 做什么和处理它,而不是视图确定应该显示/隐藏什么。一个非常基本的示例如下,但涵盖了这两个方面,主要反映了我们所拥有的......

控制器有一对称为详细信息的方法(post/get)。[Get]Details 有一个参数,Id 和 [Post]Details 需要 id 和一个视图模型。在帖子中,该方法大约有 30 行长,检查有效模型,确定其是否新,某个值是否更改(触发重定向)等等(我认为这是不正确的)。[Get]Details 检查空 id,填充必要的下拉列表,没什么特别的(我认为这是正确的)。详细视图本身包含一些逻辑: If (!Model.IsNew) { RenderAction(History => History.Show(id); } (我认为 if 中的这个是不正确的, Show 应该知道要显示什么,不管它是否是新的)。对此的加号是所述详细视图的布局没有完成两次。详细信息/添加几乎相同,

想法、意见、见解?

4

2 回答 2

5

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

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 (Shared/EditorTemplates/ThingEditor.ascx)

于 2010-11-29T18:50:08.997 回答
0

我认为您走在正确的轨道上...使用“主”视图进行布局,然后将模板化助手用于“逻辑”。依靠 Html.DisplayFor(x=>x.Thing) 和 EditorFor

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

于 2010-11-29T18:57:03.087 回答