我有一个简单的创建操作来接收表单数据,保存到数据库并重定向到列表视图。 问题是,在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的新手,感谢您的帮助。
答案 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")
。