Asp.net mvc 4 在ASP.NET MVC4中,在同一操作下处理多个表单操作的最佳实践是什么?
在使用Razor引擎的ASP.NET MVC4项目中,我有以下场景:Asp.net mvc 4 在ASP.NET MVC4中,在同一操作下处理多个表单操作的最佳实践是什么?,asp.net-mvc-4,url-routing,razor-2,Asp.net Mvc 4,Url Routing,Razor 2,在使用Razor引擎的ASP.NET MVC4项目中,我有以下场景: 我有一个至少4种不同形式的视图 我想在相同的动作映射下处理所有表单帖子 实际上,这4个表单发布到不同的路线映射,如下所示: POST: /User/FilterRolesInUse/15 POST: /User/RemoveRoles/15 POST: /User/FilterRolesNotInUse/15 POST: /User/AddRoles/15 我想知道是否有可能在相同的路径映射下处理所有4个表单,所有表单都
- 我有一个至少4种不同形式的视图
- 我想在相同的动作映射下处理所有表单帖子
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的一致性
欢迎您提供任何建议。我认为一个动作执行多个功能没有任何好处。事实上,任何必须支持代码的人都会感到困惑。我将不再提交表单,而是在web客户机中使用Ajax方法(使用JQuery Ajax)来获取此视图和更新/插入/删除操作所需的数据。通过这种方式,您不必回发整个页面来执行可能只在视图的一部分上执行的操作,这将产生性能更好的页面和更好的用户体验。将控制器更改为ASP.NET Web API控制器,并使这些方法成为使用一致URL命名约定的REST API,并使用HTTP谓词指示正在执行的操作类型。您将得到3种方法,它们为您现在拥有的4种方法提供服务,可能看起来像这样(它们对应于问题中列出的相同顺序) 你的控制器看起来像这样
class RoleController : ApiController {
public List<Role> Get(int id, boolean InUse) { ... }
public void Delete(int id) { ... }
public void Post(List<Role> roles) { ... }
}
class角色控制器:ApiController{
公共列表Get(int-id,boolean-InUse){…}
公共无效删除(int-id){…}
公共作废帖子(列出角色){…}
}
这保持了关注点的清晰分离,同时也保持了一致和可理解的URL约定。的确如此!分离关注点是必须的,您关于使用Web API的建议无疑是处理此场景的方法。谢谢@kevin junghans!
class RoleController : ApiController {
public List<Role> Get(int id, boolean InUse) { ... }
public void Delete(int id) { ... }
public void Post(List<Role> roles) { ... }
}