我的印象是应用程序中的每个View都有自己唯一的URL。例如:
主页/索引 首页/测试 首页/错误 主页/帮助
在我的上传控制器中,我调用错误视图。然而,URL保持原样,而不是更改以反映错误URL。
[HttpPost]
public ActionResult Index(HttpPostedFileBase excelFile)
{
if (excelFile != null)
{
*Snip for brevity, everything is peachy here.*
return View();
}
else
{
return View("Error");
}
}
为什么会出现这种情况?
URL不应该是/ Upload / Error吗?谢谢您的帮助。 :)
答案 0 :(得分:1)
您正在返回视图的内容。如果要更改URL,则需要RedirectToAction()
答案 1 :(得分:1)
网址不会映射到视图。
网址映射到控制器操作。
请参阅此http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx
如果您想要一个/ Upload / Error
的URL你可以:
public ActionResult Error()
{
return View();
}
[HttpPost]
public ActionResult Index(HttpPostedFileBase excelFile)
{
if (excelFile != null)
{
*Snip for brevity, everything is peachy here.*
return View();
}
else
{
return RedirectToAction("Error","Upload");
}
}
答案 2 :(得分:0)
如果您希望将URL更改为/ Upload / Error,那么您将添加到UploadController:
public ActionResult Error()
{
return View();
}
然后,您将调用:return RedirectToAction("Error","Upload");
。
这基本上显示了控制器,操作和视图之间的区别 - 控制器操作可以将任何他们想要的视图(或其他ActionResult)返回给请求,但只返回到一个URL,除非他们将请求“重新路由”到另一个行动。
答案 3 :(得分:0)
在ASP.NET MVC中,每个URL都映射到控制器/操作。因此,您可以从控制器操作返回任何视图,这不会更改URL。
如果您想重定向到错误页面,请在项目中添加ErrorController
或在FileUploadController
中添加错误操作,然后执行重定向到相应的操作:
public class ErrorController : Controller
{
public ActionResult FileUploadError()
{
return View(); //returns view "FileUploadError"
}
}
public class FileUploadController : Controller // the controller you use to upload your files
{
public ActionResult Error()
{
return View(); //return view "Error"
}
public ActionResult Index(HttpPostedFileBase excelFile) // action from your post
{
//... do the upload stuff
else
{
return RedirectToAction("Error"); // if you want to use the Error action in this controller;
// or
return RedirectToAction("FileUploadError", "Error"); // if you want to use the action on the ErrorController
}
}
}