Asp.net
asp.net mvc 路由id參數
我正在使用 asp.net mvc 開發一個網站。我有路線
routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults );這是預設路由。我有一個方法
public ActionResult ErrorPage(int errorno) { return View(); }現在,如果我想使用<http://something/mycontroller/Errorpage/1>執行此程式碼, 它不起作用。但是,如果我將參數名稱更改為 id
errorno就可以了。此方法是否必須具有相同的參數名稱?還是我需要為這種情況創建單獨的路線?
因此,您有一個名為 的參數
errorno,並且您希望它具有來自 parameter 的值id。這顯然是綁定問題。如何解決:
- 為模型綁定器創建一個類:
public class ParameterBinder : IModelBinder { public string ActualParameter { get; private set; } public ParameterBinder(string actualParameter) { this.ActualParameter = actualParameter; } public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { object id = controllerContext.RouteData.Values[this.ActualParameter]; return id; } }
- 為自定義模型綁定創建自定義屬性:
[AttributeUsage(AttributeTargets.Parameter)] public class BindParameterAttribute : CustomModelBinderAttribute { public string ActualParameter { get; private set; } public BindParameterAttribute(string actualParameter) { this.ActualParameter = actualParameter; } public override IModelBinder GetBinder() { return new ParameterBinder(this.ActualParameter); } }
- 根據需要將新屬性應用於您的操作參數:
public ActionResult ErrorPage( [BindParameter("id")] int errorno) { return View(); }現在您將擁有該值,該值作為您的 url
errorno傳遞。id注意:您可以
id從上面的範例中刪除參數,如果您確定只需要解決id.離開這種方式也將允許您綁定其他參數。