asp.net-mvc – 如何将ASP.Net MVC路径段中的1或0映射到布尔动作
我们有一些
PHP和
Javascript应用程序调用一些ASP.NET MVC端点.假设我们有这个端点:
public ActionResult DoSomething(bool flag) { } 我希望它匹配flag的值,无论我传入1或0的整数,还是传入一个“true”或“false”的字符串.我需要实现框架的哪个部分才能与之匹配? 解决方法
执行此操作的最佳方法是使用自定义值提供程序.虽然您可以使用完整的自定义模型绑定器来执行此操作,但这可能会因您的要求而过度,并且只需简单地实现自定义值提供程序即可.
有关何时使用自定义模型绑定器以及何时使用自定义值提供程序的一些指导,请参阅here和here. 您可以创建一个自定义值提供程序来处理具有“flag”键的路由值,并在值提供程序中处理int到bool的转换.执行此操作的代码如下所示: public class IntToBoolValueProvider : IValueProvider { public IntToBoolValueProvider(ControllerContext context) { if (context == null) throw new ArgumentNullException("context"); this._context = context; } public bool ContainsPrefix(string prefix) { return prefix.ToLower().IndexOf("flag") > -1; } public ValueProviderResult GetValue(string key) { if (ContainsPrefix(key)) { int value = 0; int.TryParse(_context.RouteData.Values[key].ToString(),out value); bool result = value > 0; return new ValueProviderResult(result,result.ToString(),CultureInfo.InvariantCulture); } else { return null; } } ControllerContext _context; } public class IntToBoolValueProviderFactory : ValueProviderFactory { public override IValueProvider GetValueProvider(ControllerContext controllerContext) { return new IntToBoolValueProvider(controllerContext); } } 在值提供程序中,实现ContainsPrefix方法以对您感兴趣的路由值键返回true,在本例中为键“flag”.在GetValue标志中,将“flag”路由数据条目的值转换为int,然后转换为boolean,具体取决于int是否大于零.对于不是“flag”的所有其他路由数据键,您只需返回null,它告诉MVC框架忽略此ValueProvider并转移到其他值提供程序. 要进行连接,您需要实现ValueProviderFactory的子类,该子类创建自定义IntToBoolValueProvider提供程序.此外,您需要使用MVC框架注册此工厂.您可以使用静态ValueProviderFactories类在global.asax中执行此操作: protected void Application_Start() { ValueProviderFactories.Factories.Insert(0,new IntToBoolValueProviderFactory()); } 如果您的路线设置如下: routes.MapRoute("","{controller}/foo/{flag}",new { action = "Foo" }); 这条路线将直接请求 http://localhost:60286/Home/Foo/{flag} 动作方法 public ActionResult Foo(bool flag) { //Implement action method return View("Index"); } 当{flag}段大于0时,bool标志输入参数将为true,而当它为零时,flag参数将为false. 有关MVC自定义价值提供商的更多信息,请访问here. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – jQuery.Validation.Unobtrusive客户端验证仅
- 接受List的ASP.NET Web方法失败,“Web服务方法名称无效”.
- asp.net-mvc – 今天在.NET中实现RESTful架构的最好方法是什
- asp.net-mvc – asp.net mvc ajax post – redirecttoactio
- asp.net – 如何在Dotnetnuke中更改Radcaptcha的音频文件
- iis-6 – 如何防止IIS覆盖我在ASP.NET中设置的文化?
- 更新了ASP.NET 3.5到4.0 – > Sys.WebForms.PageRequestMan
- asp.net – 谷歌Chrome在崩溃后恢复会话cookie,如何避免?
- asp.net – 在IIS7上为WordPress重写URL
- asp.net-mvc – mvc中的多个内容占位符?
- asp.net – IIS 6.0和.Net 4的Default.aspx?
- 初识ABP vNext(6):vue+ABP实现国际化
- asp.net-mvc-4 – ASP.NET MVC:脚本捆绑何时决定
- asp.net-core – 如何从控制器中解析ASP NET 5中
- asp.net-mvc – 在ASP.NET MVC中的View和Partial
- asp.net-mvc – 标准ASP.NET MVC ModelBinder的文
- asp.net-mvc – 未找到路径’/ Home’的控制器或
- 如果我应该开始使用asp.net mvc 4而不是asp.net
- asp.net – RequiredFieldValidator要求用户单击
- 处理ASP.NET MVC中日期的最佳方法 – Javascript