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 } );
但现在我所有的路线进入主控制器。所以我这种机智的努力并不像希望的那样工作。
您可以使用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 }
);
谢谢@曼南这让我开始了正确的道路,现在答案就在上面, – ransems
怎么你的控制器代码看起来像什么地方呢? –
回顾这个问题,我也不想创建一个** contact.cshtml **文件,因为我希望默认路由将它作为参数处理。即:在db中查找,并根据需要提取内容并进行显示。 – ransems
这将是很好的阅读MVC https://msdn.microsoft.com/en-us/library/dd381412(v=vs.108).aspx此外这是一个质量很低的问题。 – manuzi1