Home Controllerがあり、アクション名はIndexです。 My route configで以下のようなルートを設定します。
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
今、私のページをhttp://localhost:11045/Home/Index
正しい。
次のようにページを呼び出すと、エラーページにリダイレクトされます。localhost:11045/Home/Index/98
またはlocalhost:11045/Home/Index/?id=98
。
ルーティング属性を使用してこれを処理する方法。
コントローラでの私のアクションは以下のようになります。
public ActionResult Index()
{
return View();
}
このようにコントローラーを飾ります
[RoutePrefix("Home")]
public HomeController : Controller {
//GET Home/Index
[HttpGet]
[Route("Index")]
public ActionResult Index() {
return View();
}
}
そして、このようなルートテーブルでそれを有効にします
public class RouteConfig {
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//enable attribute routing
routes.MapMvcAttributeRoutes();
//convention-based routes
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = "" }
);
}
}
public class URLRedirectAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
string destinationUrl = "/VoicemailSettings/VoicemailSettings";
filterContext.Result = new JavaScriptResult()
{
Script = "window.location = '" + destinationUrl + "';"
};
}
}
ルーティングの詳細については、こちらをご覧ください: http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/asp-net-mvc-routing-overview-cs
ほとんどの場合、デフォルトのルーティングは次のようになります。
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
また、インデックスアクションメソッドにパラメータがないようです。以下を参照してください。
public ActionResult Index(string id)
{
return View();
}
string id
インデックスメソッド。
インデックスアクションを次のように変更してみてください。
public ActionResult Index(int? id = null)
{
return View();
}
これでうまくいくはずです。そのため、IDを「/ {value}」を持つパラメーターとして渡すか、単に「/?id = {value}」を使用できます