【问题标题】:MVC Post with dynamic routing具有动态路由的 MVC Post
【发布时间】:2009-12-28 17:53:36
【问题描述】:

我创建了一个路由结构,而 URL 的操作部分用作动态处理程序,用于选择特定的用户创建的系统名称。即

http://mysite.com/Systems/[SystemName]/Configure,其中 [SystemName] 指定他们想要配置的系统的名称。

系统路由的方法如下:

public ActionResult Index(string systemName, string systemAction)
    {

        ViewData["system"] = _repository.GetSystem(systemName);
        if (systemAction != "")
        {
            return View(systemAction);
        }
        else
        {
            // No Id specified.  Go to system selection.
            return View("System");
        }
    }

上述方法将系统设置为配置并路由到一个静态方法,在该方法中显示视图并且表单等待值。

我的问题是,当我创建我的配置视图时,我在提交表单时丢失了我发布的值,因为它路由回上面的索引控制器。如何确定在点击上面的索引控制器时是否正在发布数据,以便我做出决定?

谢谢! 乔治

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-routing


    【解决方案1】:

    像这样注释处理 POST 的控制器方法:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index(string systemName, string systemAction)
    {
       // Handle posted values.
    }
    

    您可以在控制器中使用不同的方法来处理 GET:

    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult Index(string systemName, string systemAction)
    {
       // No posted values here.
    }
    

    请注意,虽然我在每种情况下都复制了相同的方法和参数,但第二种方法(参数和类型)的签名必须不同,这样两种方法才不会有歧义。

    这个NerdDinner tutorial has examples

    【讨论】:

    • 当然请记住,即使使用 HttpPostAttribute/HttpGetAttribute,这两个操作名称也是模棱两可的。
    • 没错,您必须更改其中一个的签名。
    • 我仍然不确定这是否能解决我的问题。我有一个控制器,它通过一个中心点对所有内容进行路由,并对一个动作做出动态选择。我只需要保持相同的索引控制器签名,但需要能够将该系统路由到适当的操作,然后确定是否发生了帖子。这有意义吗?
    • 您可以检查 RequestType 以确定您是否正在发布。
    猜你喜欢
    • 2015-07-16
    • 2010-09-22
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    相关资源
    最近更新 更多