类型为object的.NET MVC Action参数
如果我有一个简单的控制器路由如下:
context.MapRoute( "Default", "{controller}/{action}", new { controller = "Base", action = "Foo"} );
并且控制器Foo动作如下:
[HttpPost] public ActionResult Foo(object bar) { ... }
bar
怎么样? 我已经调试并看到它是一个string
,但我不确定它是否总是被编组为一个字符串。
基本上我想让方法接受bool
, List
和int
。 我可以发送一个类型参数并从post中自己进行模型绑定。 (该post是一个表格post)。
这是我当前的post&bar=False
或&bar=23
或&bar[0]=24&bar[1]=22
。
我知道我可以看一下Foo动作方法里面的post,但是我想要一些关于在MVC3中处理这个问题的最佳方法的输入
在这种情况下,我可能会创建一个自定义的ModelBinder:
https://buildstarted.com/2010/09/12/custom-model-binders-in-mvc-3-with-imodelbinder/
然后可能使用动态对象来允许多种类型。 看这里
用于DynamicObject的MVC3 ModelBinder
自定义模型绑定器是一个选项,您可以将其应用于参数。 您的绑定器可以最好地猜测类型(除非MVC从上下文获得更好的提示,它将只假设字符串)。 但是,这不会给你强类型参数; 你必须测试和演员。 虽然这没什么大不了的……
另一种可以强制键入控制器动作的可能性是创建自己的filter属性,以帮助MVC找出使用哪种方法。
上述就是C#学习教程:类型为object的.NET MVC Action参数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
[ActionName("SomeMethod"), MatchesParam("value", typeof(int))] public ActionResult SomeMethodInt(int value) { // etc } [ActionName("SomeMethod"), MatchesParam("value", typeof(bool))] public ActionResult SomeMethodBool(bool value) { // etc } [ActionName("SomeMethod"), MatchesParam("value", typeof(List))] public ActionResult SomeMethodList(List value) { // etc } public class MatchesParamAttribute : ActionMethodSelectorAttribute { public string Name { get; private set; } public Type Type { get; private set; } public MatchesParamAttribute(string name, Type type) { Name = name; Type = type; } public override bool IsValidForRequest(ControllerContext context, MethodInfo info) { var val = context.Request[Name]; if (val == null) return false; // test type conversion here; if you can convert val to this.Type, return true; return false; } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1007302.html