为什么这个URL在MVC3中是这样的?

时间:2011-02-25 00:41:56

标签: c# asp.net-mvc-3 views

我的印象是应用程序中的每个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");
        }            
    }

为什么会出现这种情况?

enter image description here

enter image description here

enter image description here

URL不应该是/ Upload / Error吗?谢谢您的帮助。 :)

4 个答案:

答案 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
        }   
    }
}