0

我在使用 Razor 引擎的 ASP.NET MVC4 项目中有以下场景:

  • 我有至少 4 种不同形式的视图。
  • 我想在相同的操作映射下处理所有表单 POST 。

实际上,这 4 个表单发布到不同的 Route Mapping,如下所示:

POST: /User/FilterRolesInUse/15
POST: /User/RemoveRoles/15
POST: /User/FilterRolesNotInUse/15
POST: /User/AddRoles/15

我想知道是否可以在同一个路由映射下处理所有 4 个表单,所有表单都发布到/User/Roles/15然后控制器可以区分提交了哪个表单。这个概念类似于:

class UserController : Controller {

  //
  // POST: /User/Roles/
  public ActionResult Roles(int? id, object form) {
    return DelegateToFormLogic(id, form);
  }

}

我只是想知道是否有可能,因为我真的想保持 URL一致

欢迎任何意见建议

4

1 回答 1

1

我看不出有一个执行多种功能的动作有什么好处。事实上,任何必须支持该代码的人都会感到困惑。我将摆脱提交表单并在您的 Web 客户端中使用 Ajax 方法(使用 JQuery ajax)来获取此视图和更新/插入/删除操作所需的数据。这样,您不必回发整个页面来执行可能仅在视图的某些部分上发生的操作,这将导致更好的页面性能和更好的用户体验。将您的控制器更改为 ASP.NET Web API 控制器,并使这些方法成为使用一致 URL 命名约定并使用 HTTP 动词来指示正在执行的操作类型的 REST API。

GET: /api/Role/15?InUse=True
DELETE: /api/Role/15
GET: /api/Role/15?InUse=False
POST: /api/Role

你的控制器看起来像这样。

class RoleController : ApiController {

  public List<Role> Get(int id, boolean InUse) { ... }
  public void Delete(int id) { ... }
  public void Post(List<Role> roles) { ... }
}

这保持了关注点的清晰分离,同时还保持了一致且易于理解的 URL 约定。

于 2012-11-26T14:09:53.480 回答