我在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运行这个代码
它不工作但是如果将参数名称更改为来自errorno的id
有用.
@R_403_323@
因此,您有一个名为errorno的参数,并且您希望它具有参数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(); }
现在你的errnoo会有这个值,它被传递给你的url的id.
注意:您可以从上述示例中删除参数id,如果您确定只需要为id解决问题.
离开这种方式将允许你绑定其他参数.