MVC4和路由

时间:2013-04-02 06:17:22

标签: c# asp.net-mvc asp.net-mvc-4

我有一个控制器和视图工作,调用Web服务,并返回一个结果。目前,它是我的默认控制器,称为Home,它使用索引视图页面。

它正在运作。我可以发布数据,然后在刷新的屏幕上放一些东西。它重新加载相同的视图。

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

我的路线现在看起来像这样:

    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.Index屏幕以显示......

2 个答案:

答案 0 :(得分:1)

您的路线映射不正确,请查看: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" });

答案 1 :(得分:-1)

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

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

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

您的更改就像从一个页面重定向到另一个页面,因此您需要将完整路径放在此处

请尝试&回答是否有问题