Asp.net

asp.net mvc 路由id參數

  • December 12, 2016

我正在使用 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>執行此程式碼, 它不起作用。但是,如果我將參數名稱更改為 iderrorno 就可以了。

此方法是否必須具有相同的參數名稱?還是我需要為這種情況創建單獨的路線?

因此,您有一個名為 的參數errorno,並且您希望它具有來自 parameter 的值id。這顯然是綁定問題。

如何解決:

  1. 為模型綁定器創建一個類:
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;
   }
}
  1. 為自定義模型綁定創建自定義屬性:
[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);
   }
}
  1. 根據需要將新屬性應用於您的操作參數:
public ActionResult ErrorPage(
[BindParameter("id")]
int errorno)
{
   return View();
}

現在您將擁有該值,該值作為您的 urlerrorno傳遞。id

注意:您可以id從上面的範例中刪除參數,如果您確定只需要解決id.

離開這種方式也將允許您綁定其他參數。

引用自:https://stackoverflow.com/questions/2743223