1

在 ASP.NET MVC 中有很多 Helpers 接受匿名类型作为参数并生成输入。

例如:

@Html.Action("Action", "Controler", new {routeVal1 = 1, routeVal2 = 2})

我的问题是如何实现我自己的接受匿名类型的扩展。我应该将它作为对象引用并使用反射还是有更优雅的解决方案?

4

2 回答 2

3

您可以使用dynamic而不是object.

Visual C# 2010 引入了一种新类型动态。该类型是静态类型,但动态类型的对象绕过静态类型检查。在大多数情况下,它的功能就像它具有类型对象一样。在编译时,假定类型为动态的元素支持任何操作。因此,您不必担心对象是否从 COM API、IronPython 等动态语言、HTML 文档对象模型 (DOM)、反射或程序中的其他位置获取值。但是,如果代码无效,则会在运行时捕获错误。

于 2012-06-30T09:40:28.847 回答
1

首先,我假设您正在为 @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 继承,所以你的类也可以有一个签名。

于 2012-06-30T09:55:59.713 回答