MVC将网站地图根目录中的多个页面名称作为参数

问题描述:

当我访问我的网站(MVC)的根目录mysite.com/我收到了很好的Home/Index操作。但我希望能够去mysite.com/Home和mysite.com/about和mysite.com/contact并显示不同的内容,即使它仍然将Home/Index.cshtml和页面名称正在作为参数传递。MVC将网站地图根目录中的多个页面名称作为参数

如果我曾经创建一个新的控制器名称联系,并去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 } );

但现在我所有的路线进入主控制器。所以我这种机智的努力并不像希望的那样工作。

+0

怎么你的控制器代码看起来像什么地方呢? –

+0

回顾这个问题,我也不想创建一个** contact.cshtml **文件,因为我希望默认路由将它作为参数处理。即:在db中查找,并根据需要提取内容并进行显示。 – ransems

+0

这将是很好的阅读MVC https://msdn.microsoft.com/en-us/library/dd381412(v=vs.108).aspx此外这是一个质量很低的问题。 – manuzi1

您可以使用RouteConfig.cs中的以下配置从url中删除主页文本...只需放置下面的代码行即可。

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 } 
      ); 
+1

谢谢@曼南这让我开始了正确的道路,现在答案就在上面, – ransems