【问题标题】:ASP.Net MVC redirecttoaction not passing action name in urlASP.Net MVC 重定向操作未在 url 中传递操作名称
【发布时间】:2011-05-29 18:15:27
【问题描述】:

我有一个简单的创建操作来接收表单数据,保存到数据库并重定向到列表视图。 问题是,redirecttoaction 结果执行后,我的浏览器上的 url 丢失了操作部分。它应该是“http://{hotsname}/Product/List”,但输出为“http://{hotsname}/Product/”。 以下是我的代码:

    [HttpPost]
    public ActionResult Create(VEmployee model, FormCollection fc)
    {
        var facility = FacilityFactory.GetEmployeeFacility();

        var avatar = Request.Files["Avatar"].InputStream;

        var newModel = facility.Save(model, avatar);

        return RedirectToAction("List");
    }

该页面可以正确呈现列表视图内容,但由于该视图页面中的某些链接使用相对url,因此功能被中断。我现在使用 return Redirect("/Employee/List") 来强制 url。但我只是想知道为什么缺少动作名称。我使用 MVC3 和 .Net 框架 4。

我是 ASP.Net MVC 的新手,感谢您的帮助。

【问题讨论】:

  • 我遇到了同样的问题,我只注册了一个路由,即样板默认路由。我知道提供 Index 作为默认值,我正在尝试重定向到 Index,但 Index 肯定只是 Home 的默认值?

标签: asp.net-mvc


【解决方案1】:

您的路由表肯定说“列表”操作是默认操作,因此当您以 RedirectToAction("List") 重定向到它时 - 路由会忽略该操作,因为它是默认操作。

现在,如果您从路由中删除默认值 - RedirectToAction 将生成正确的(针对您的情况)Url,但您必须在其他地方仔细检查您不依赖 List 作为默认操作。

【讨论】:

    【解决方案2】:

    好吧,克里斯,

    如果您在 http://{hotsname}/Product/ 上获得了正确的内容,那么路由似乎使该 URL 间接指向 List(使用像 {controller}/{action} 这样的模式)并且从路由解析 URL 时会发生错误{action} 参数只是设置为默认值List。两个 URL 都可以指向同一个操作,但路由引擎以某种方式采用了没有明确操作名称的路由。

    你应该检查:

    • 您定义路线的顺序
    • 有多少条路线可能导致EmployeeController.List()
    • 其中哪一条路线的优先级最高
    • 路线的默认值

    只需使用显式值创建路由:employee/list 指向您的 List 操作并确保 生成链接时要选择的路由(如果可能,它应该是最具体的路由)。

    如果您在此处提供路线映射,那就太好了。

    但由于此视图中有一些链接 页面使用相对url,功能 被打断了。

    你为什么会这样?为什么不通过路由引擎生成所有的链接呢?

    【讨论】:

      【解决方案3】:

      使用重载RedirectToAction("Action") 时,您需要指定同一控制器中的操作。由于您在不同的控制器中调用动作,因此您需要使用备用重载来指定动作,例如RedirectToAction("List", "Employee").

      【讨论】:

      • 我在同一个控制器中调用动作,RedirectToAction("List", "Employee") 返回相同的url结果
      猜你喜欢
      • 2010-09-07
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      相关资源
      最近更新 更多