2

使用开箱即用的 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的 url,页面上的表单将有一个动作:

using (Html.Form<EggController>(c => c.Create())

这意味着第二页将有一个http://localhost/Egg/Create的 url ,对我来说这是误导,该操作应该称为 Create,因为我正在创建鸡蛋,但是正在显示一个列表视图,所以http的 url ://localhost/Egg/List会制作更多场景。如何在不使我的视图或操作名称产生误导的情况下实现这一目标?

4

3 回答 3

4

问题是你的行为做了两件事,违反了单一责任原则。

如果您的 Create 操作在完成创建项目后重定向到 List 操作,那么这个问题就会消失。

于 2008-09-01T21:19:48.030 回答
0

Phil Haack方法如何变成行动

于 2008-09-05T02:08:54.597 回答
0

Scott Gu 的帖子中概述的 ActionVerbs似乎是一个不错的方法;

斯科特 说:

您可以创建操作方法的重载实现,并使用新的 [AcceptVerbs] 属性让 ASP.NET MVC 过滤它们的分派方式。例如,下面我们可以声明两个 Create action 方法——一个在 GET 场景中调用,一个在 POST 场景中调用

[AcceptVerbs("GET")]
public object Create() {}
[AcceptVerbs("POST")]
public object Create(string productName, Decimal unitPrice) {}
于 2008-09-04T10:29:28.130 回答