ASP.Net MVC redirecttoaction不在url中传递动作名称

时间:2010-12-23 02:27:47

标签: asp.net-mvc

我有一个简单的创建操作来接收表单数据,保存到数据库并重定向到列表视图。 问题是,在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,因此功能会中断。我现在使用返回重定向(“/ Employee / List”)来强制网址。但我只是想知道为什么动作名称丢失了。我使用MVC3和.Net框架4。

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

嗯,克里斯,

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

你应该检查:

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

只需使用明确的值employee/list制作路线即可指向您的List操作,并确保 在生成链接时选择的路径(应该是最多的)如果可能的话,具体路线。)

如果你在这里提供你的路线映射会很好。

  

但是因为这个视图中的一些链接   页面使用相对url,函数   被打断了。

你为什么这么做?为什么不通过路由引擎生成所有链接?

答案 2 :(得分:-1)

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