asp.net mvc路由id参数

前端之家收集整理的这篇文章主要介绍了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运行这个代码
它不工作但是如果将参数名称更改为来自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解决问题.

离开这种方式将允许你绑定其他参数.

猜你在找的asp.Net相关文章