MVC4 and Routing

本文关键字:Routing and MVC4 | 更新日期: 2023-09-27 18:06:52

我有一个单独的控制器和视图工作,调用web服务,并返回结果。目前,它是我的默认控制器,名为Home,它使用Index视图页面。

工作。我可以发布数据,然后在刷新后的屏幕上显示一些内容。它会重新加载同一个视图。

现在,一旦我提交,我得到一个很好的回复,我想加载一个不同的控制器/视图

我的路由现在是这样的:

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
        "Home",
        "{lang}",
        new { controller = "Home", action = "Index", lang="English" });
    routes.MapRoute(
        "Location",
        "{lang}",
        new { controller = "Location", action = "Index", lang = "English" });

我创建了一个名为Location的控件,它只有这样:

 //LocationController 
 public class LocationController : Controller
 {
    public ActionResult Index()
    {
       return View();
    }
 }

在我的主控制器中,我正在执行逻辑,然后尝试加载新页面。

        [HttpPost]
        public ActionResult Index(HomeModel model)
        {
            var proxy = new Proxy();
            var r = proxy.GetLocationByAddress(model.SearchString, o.ToString());
            if(r==null)
            {
                ViewBag.Error = "Error during search";
                return View(model);
            }
            ViewBag.Error = string.Format("Found {0} at {1}, {2}", r.StreetName, r.Latitude, r.Longitude);
            return RedirectToAction("Index", "Location");
        }

但是当我运行它,提交它,通过一步,它击中RedirectToAction -但是…主屏幕只是刷新。我从来没有看到新的Location视图。我哪里做错了?我还没有掌握路线…我需要传递一个新对象给Location。

MVC4 and Routing

你的路由映射是不正确的,看看这个:http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-custom-routes-cs

routes.MapRoute(
    "Location",
    "Location/{lang}",
    new { controller = "Location", action = "Index", lang = "English" });

我认为你不需要做任何改变。在你的情况下,你想加载不同的控制器与它的尊重视图,你需要下面只更改

替换此代码return RedirectToAction("Index", "Location");

代码为return Redirect("http://www.yoursite.com/Location/Index");

你的改变就像从一个页面重定向到另一个页面,所以你需要把你的完整路径放在这里

请尝试&如有问题请回复