MVC将多个页面名称从网站的根目录映射到一个控制器作为参数

时间:2017-09-27 12:02:33

标签: c# asp.net-mvc asp.net-mvc-5 routing

当我访问我的网站(MVC)的根目录 mysite.com / 时,我得到了很好的Home / Index操作。但我希望能够访问 mysite.com/Home 和mysite.com/about以及 mysite.com/contact 并显示不同的内容,即使它仍在继续到Home / Index.cshtml,页面名称作为参数传递。

如果我创建了一个新的控制器名称联系人并转到 mysite.com/contact 我使用ContactController就可以了。

这是否可行且易于实施?

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

    public ActionResult About()
    {
        ViewBag.Message = "Your application description page.";

        return View();
    }

    public ActionResult Contact()
    {
        ViewBag.Message = "Your contact page.";

        return View();
    }
}

添加控制器代码,构成默认项目。但我希望消除关于联系操作结果,并通过索引作为参数进行处理。

public ActionResult Index(string pageName)
    {

        // do something with parameter, pull data from db and return view

        return View();
    }

我在控制器中的ActionResult:

public ActionResult Index(string Id)
    {
        if (Id != null)
        {
            // get HTMl from DB
            // build viewModel
            return View(viewModel);
        }
        else
        {
            return View();
        }               
    }

如果我转到以下网址,我会得到 成功两次: /Website/index/About-Us =成功

/?Id=About-Us =成功查询字符串

/About-Us =正如预期的那样成功!嗬

我的路线:routes.MapRoute( "Home", "{id}", new { controller = "Website", action = "Index", area = "", id = UrlParameter.Optional } );

但是现在我的所有路线都转到家庭控制器。所以我这种机智的努力并没有像希望的那样发挥作用。

1 个答案:

答案 0 :(得分:0)

您可以使用RouteConfig.cs中的以下配置从URL中删除Home文本...只需输入以下代码行即可。

routes.MapRoute(
    "Home",
    "",
    new { action = Index, controller = Home }
);

注意:上面的代码行必须放在

之前
 routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Dashboard", action = "Login", id = UrlParameter.Optional }
            );