web-dev-qa-db-ja.com

MVC 5ルーティング属性

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(); 
}
10
user1389320

ForASP.NET MVC 5の属性ルーティング

このようにコントローラーを飾ります

[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 = "" }
        );
    }
}
26
Nkosi
public class URLRedirectAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
                string destinationUrl = "/VoicemailSettings/VoicemailSettings";
                filterContext.Result = new JavaScriptResult()
                {
                    Script = "window.location = '" + destinationUrl + "';"
                };
        }
    }
1
Anubhav Sharma

ルーティングの詳細については、こちらをご覧ください: 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インデックスメソッド。

1
JDavila

インデックスアクションを次のように変更してみてください。

public ActionResult Index(int? id = null) 
{
  return View(); 
}

これでうまくいくはずです。そのため、IDを「/ {value}」を持つパラメーターとして渡すか、単に「/?id = {value}」を使用できます

0