在 ASP.NET MVC 中有很多 Helpers 接受匿名类型作为参数并生成输入。
例如:
@Html.Action("Action", "Controler", new {routeVal1 = 1, routeVal2 = 2})
我的问题是如何实现我自己的接受匿名类型的扩展。我应该将它作为对象引用并使用反射还是有更优雅的解决方案?
在 ASP.NET MVC 中有很多 Helpers 接受匿名类型作为参数并生成输入。
例如:
@Html.Action("Action", "Controler", new {routeVal1 = 1, routeVal2 = 2})
我的问题是如何实现我自己的接受匿名类型的扩展。我应该将它作为对象引用并使用反射还是有更优雅的解决方案?
您可以使用dynamic
而不是object
.
Visual C# 2010 引入了一种新类型动态。该类型是静态类型,但动态类型的对象绕过静态类型检查。在大多数情况下,它的功能就像它具有类型对象一样。在编译时,假定类型为动态的元素支持任何操作。因此,您不必担心对象是否从 COM API、IronPython 等动态语言、HTML 文档对象模型 (DOM)、反射或程序中的其他位置获取值。但是,如果代码无效,则会在运行时捕获错误。
首先,我假设您正在为
@HTML
对象纠正扩展,您需要做的是创建方法
RouteValueDictionary 类
所以它变成了 public static mvchtmlstring Foo(string Action, string Controller, RouteValueDictionary values)
那么你在函数调用中
TagBuilder tb = new TagBuilder("D");
tb.Attributes.Add();
所以整个事情变成了
public static mvchtmlstring Foo(string taglabel, string url, RouteValueDictionary values)
{
TagBuilder tb = new TagBuilder("a");
tb.Attrubutes.add("href",url);
tb.setInnerText(taglabel);
tb.MergeAttributes(values);
return new MvcHtmlString(tb.toString());
}
那么电话是
@Html.Foo("Bar","Http://www.stackoverflow.com",new {Id="d", class="dd"})
BTW RouteValueDictionary 从 IDictionary 继承,所以你的类也可以有一个签名。