【问题标题】:What are typical ASP.NET MVC - Controller Action Name conventions?什么是典型的 ASP.NET MVC - 控制器操作名称约定?
【发布时间】:2010-10-19 13:09:42
【问题描述】:

我正在努力为我的行为选择合适的名称。我想区分返回视图的操作:

  1. 创建
  2. 编辑
  3. 编辑-创建

这是我目前所拥有的:

创建 --> 显示创建的空表单 添加 --> 从创建和保存新实体接收数据 编辑 --> 在表单中显示现有实体以进行编辑 更新 --> 保存对现有实体的更改 ??? --> 显示用于编辑或创建的表单,具体取决于 情况 保存 --> 根据实体是否保存或更新实体 已经存在与否。

那么,显示Create/Edit 视图的操作的合适名称是什么,该视图将其数据发送到Save

我曾考虑过CreateEdit,因为它明确且具体,但我不确定。有什么建议吗?

【问题讨论】:

  • Create 通常既是表单淋浴器 (GET) 也是数据接收器 (POST)。
  • 我已经看到这些组合在重载中,并想知道是否有人对这种方法有任何优点或缺点。
  • @bzarah 缺点?一个都不知道优点?让您遵守 REST 标准。
  • 我想我不喜欢重载这些方法的原因是我永远不会在代码中正常执行此操作。如果我有两种方法可以做一些非常不同的事情,比如显示一个空表单与将某些内容保存到数据库,我会给它们不同的名称,而不是重载它们。我已经对 REST 进行了足够多的阅读以了解基础知识,但真的看不出它对我的 Intranet Web 应用程序很重要的任何原因。
  • 看看 REST。他们都在进行创建,一个使用 GET,另一个使用 POST 动词。方法和动词一起指定了正在发生的事情。他们都关心创建——一个负责显示创建表单,另一个负责处理来自它的输入。 在内部他们可能会做一些不同的事情,但在概念上他们是相互联系的。

标签: asp.net-mvc controller action


【解决方案1】:

我通常使用Create() 添加新实体,使用Edit() 编辑新实体。

我重载了 GET 和 POST 方法,并为接收数据的方法添加了一个 [HttpPost] 属性,例如:

public ActionResult Create()
{
    // this one renders the input form
    ...
    return View();
}

[HttpPost]
public ActionResult Create( MyViewModel model )
{
    // this one accepts the form post
    if ( ModelState.IsValid )
    {
       ...
       return RedirectToAction( ... );
    }
    return View( model );
}

这种约定使查找相关方法变得容易。

【讨论】:

  • 所以,创建(新实体),编辑(更改现有),创建/编辑 --> ???另外,将这些动作组合成一个重载的利弊是什么?
  • 如果您可以将空模型传递给 GET 方法并且可以在 POST 方法中检测到实体是新实体,则创建/编辑工作正常,例如通过检查零 ID。但是,我的控制器方法非常小并且功能不同 - 即 create 方法只是将视图模型对象映射到一个新实体并保存它,而 edit 方法加载实体并将模型映射到它上面 - 不需要如果您使用 NHibernate 等更改跟踪 ORM,则保存更新。
  • 我们在这里也使用 NHibernate,因此可以通过相同的方法无缝地保存新实体和更新现有实体。我很想听听您对重载“显示”和“坚持”动作的方法的利弊的看法。我觉得每个单独的动作名称会产生更清晰的 API。话虽如此,ASP.NET MVC 已经通过 ActionMethodSelectorAttributes 内置了可扩展性,@bzlm 指出这更符合 RESTFful。
  • 如何无缝?当您从会话加载实体时,无需更新它 - 它是自动的。我的会话管理是在 global.asax.cs 中为我处理的,所以我什至不考虑显式更新实体。我通过可达​​性对新实体使用持久性 - 请参阅 Udi Dahan 的 Don't Create Aggregate Roots。不知道你所说的显示和坚持行动是什么意思。你的意思是细节和创建/编辑?
  • 这里不需要进入 NHibernate 讨论。 “显示”是显示用于编辑的表单和持久化,嗯,这是验证和持久化发送到服务器的数据的操作。
猜你喜欢
  • 2011-03-01
  • 2010-09-20
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多