asp.net mvc路由id参数

标签 asp.net asp.net-mvc routes

我正在使用 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 有用。

此方法是否必须具有相同的参数名称?或者我是否需要为这种情况创建单独的路由?

最佳答案

因此,您有一个名为 errorno 的参数,并且您希望它具有来自参数 id 的值。这显然是绑定(bind)问题。

如何解决:

  1. 为模型绑定(bind)器创建一个类:

    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;
        }
    }
    
  2. 为自定义模型绑定(bind)创建自定义属性:

    [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);
        }
    }
    
  3. 根据需要将新属性应用到您的操作参数:

    public ActionResult ErrorPage(
    [BindParameter("id")]
    int errorno)
    {
        return View();
    }
    

现在您的 errorno 将具有该值,该值作为您的网址的 id 传递。

注意:如果您确定只需要为 id 解析参数,则可以从上面的示例中删除参数 id

离开这种方式也将允许您绑定(bind)其他参数。

关于asp.net mvc路由id参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2743223/

相关文章:

javascript - GET 请求返回空数组而不是数组内容

c# - 如何检查 Request.QueryString 是否不为空

c# - 我如何仅在 LINQ 查询中的日期时间中的日期上使用 group by

ASP.NET 在存储过程中执行计算,或在 Gridview 中的数据绑定(bind)中执行计算

ASP.NET MVC 4 和 ExtensionlessUrlHandler

ruby-on-rails - 如何在rails中制作可变路线

c# - 使用 select 语句后将值存储在变量中

jquery - 如何在 MVC 中将图像从 View 传递到 Bootstrap Modal?

asp.net-mvc - 如何在ASP.NET MVC中实现自己的错误 View

javascript - 设置路由时 Angular 范围变量会发生变化吗?