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中的编辑 – 编译 – 调试周期?
- asp.net – 如何在MVC 3中设置图表系列颜色?
- asp.net-mvc – ELMAH和SQL Server 2008 R2?
- asp.net-mvc-3 – “区域”文件夹中的样式,脚本和图像
- asp.net-mvc – asp.net MVC antiorgerytoken异常RedirectT
- asp.net 汉字转换拼音及首字母实现代码
- asp.net-mvc – 为什么我在带有godaddy服务器的MVC3应用程序
- asp.net-mvc – .Net 4.5.1框架的maxRequestLength
- 将变量从ASP.net传递给JavaScript
- asp.net – 未知的服务器标签’ajaxToolkit:CalendarExten
- asp.net – 测试Oracle存储过程的最简单的方法
- asp.net-mvc – SSL安全SaaS应用程序的URL设计
- ASP.NET Core 2.0中Razor页面禁用防伪令牌验证
- asp.net-mvc-4 – MVC 4 Razor如果拆分div标签
- asp.net-mvc – 当注入服务或控制器的依赖关系太
- asp.net – 将ViewState移出页面?
- asp.net-mvc – ActionResult上的自定义属性
- asp.net-mvc – 为什么我在带有godaddy服务器的M
- asp.net – 经过身份验证的服务不支持跨域javasc
- asp.net – 我应该使用WebMatrix构建一个真实世界
