当我访问我的网站(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 }
);
但是现在我的所有路线都转到家庭控制器。所以我这种机智的努力并没有像希望的那样发挥作用。
答案 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 }
);