ASP.NET MVC - 操作名称如何影响 url?
Posted
技术标签:
【中文标题】ASP.NET MVC - 操作名称如何影响 url?【英文标题】:ASP.NET MVC - How do action names affect the url? 【发布时间】:2010-09-07 11:53:26 【问题描述】:使用开箱即用的 MVC,我发现生成的 URL 可能会产生误导,我想知道这是否可以解决,或者我的方法/理解是否错误。
假设我有一个 CreateEgg 页面,上面有一个表单,一旦表单被填写并提交,用户就会被带到一个 ListEggs 页面,其中包含新的鸡蛋。
所以我的鸡蛋控制器看起来像这样:
public class EggController : Controller
public void Add()
//do stuff
RenderView("CreateEgg", viewData);
public void Create()
//do stuff
RenderView("ListEggs", viewData);
所以我的第一页会有一个类似http://localhost/egg/add 的网址,并且页面上的表单将有一个动作:
using (html.Form<EggController>(c => c.Create())
意思是第二页会有一个http://localhost/Egg/Create 的url,对我来说这是误导,这个动作应该被称为Create,因为我正在创建鸡蛋,但是一个列表视图正在显示,所以http://localhost/Egg/List 的url 会制作更多场景。如何在不误导视图或操作名称的情况下实现这一目标?
【问题讨论】:
【参考方案1】:问题是你的行为做了两件事,违反了单一职责原则。
如果您的 Create 操作在完成创建项目后重定向到 List 操作,那么这个问题就会消失。
【讨论】:
【参考方案2】:How A Method Becomes An Action 菲尔·哈克
【讨论】:
【参考方案3】:Scott Gu 的 post 中概述的 ActionVerbs 似乎是一个不错的方法;
斯科特说:
你可以创建重载的 动作方法的实现,以及 使用新的 [AcceptVerbs] 属性 有 ASP.NET MVC 过滤器它们是怎样的 派出。例如,下面我们可以 声明两个 Create 操作方法 - 将在 GET 中调用的 场景,一个将被称为 在 POST 场景中
[AcceptVerbs("GET")]
public object Create()
[AcceptVerbs("POST")]
public object Create(string productName, Decimal unitPrice)
【讨论】:
以上是关于ASP.NET MVC - 操作名称如何影响 url?的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC 如何通过 Id 从另一个模型中获取名称