Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 在ASP.NET MVC4中,在同一操作下处理多个表单操作的最佳实践是什么?_Asp.net Mvc 4_Url Routing_Razor 2 - Fatal编程技术网

Asp.net mvc 4 在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个表单,所有表单都

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

  • 我有一个至少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) { ... }
}