ASp.NET MVC 3.0调用泛型扩展html辅助方法时出错

时间:2011-05-17 14:51:27

标签: asp.net-mvc-3 html-helper

我有一个像这样的扩展方法:

namespace System.Web.Mvc.Html
{
    public static class HtmlExtensions
    {
        public static T GetEnumValue<T>(this HtmlHelper helper, int value) where T : struct, IConvertible
        {
            return EnumHelper<T>.GetEnumValue(value);
        }
    }
}

然后我在Razor View上调用此方法(该方法的自动完成工作,它在视图中可见),但是我收到错误:

@Html.GetEnumValue<MyEnumHere>(1) //Getting error here

错误:Cannot convert method group 'GetEnumValue' to non-delegate type 'object'. Did you intend to invoke the method?

如果我这样 - 在编译期间没有错误:

Html.GetEnumValue<MyEnumHere>(1) //but in that case didnt get data to display.

如果说谎是

,也不会在编译期间出错
 @{
     Html.GetEnumValue<MyEnum>(1); //But then I am getting error during execution  
 }

错误:No overload for method 'Write' takes 0 arguments

有什么建议吗?

更新0.1

让它像那样工作:

var value = Html.GetEnumValue<MyEnum>(1);
    @value

仍然质疑为什么在这种情况下它不起作用:

 @Html.GetEnumValue<MyEnumHere>(1)

更新0.2

在我更新我的扩展方法以返回IHtmlStirng之后仍然无法正常工作:

@using MyTypes.Enumerators
@inherits MvcContrib.FluentHtml.ModelWebViewPage<MyModel>

@foreach (var thing in Model.Stuff)
{
    @Html.GetEnumValue<MyEnum>(thing.Id)
}
执行期间

错误

'foreach块缺少一个结束“}”字符。确保此块中的所有“{”字符都有匹配的“}”字符,并且没有任何“}”字符被解释为标记。'

<MyEnum>由于某种原因解释为html标记(收到警告:警告1“MyEnum”元素未关闭。所有元素必须是自动关闭或具有匹配的结束标记。< / strong>)在这种情况下我也无法导航到我的扩展方法,但是如果我从声明(@)中移除Html.GetEnumValue<MyEnum>(thing.Id)而不是我可以导航我的方法

1 个答案:

答案 0 :(得分:10)

通常,HTML帮助程序应返回字符串或IHtmlString,因为这是它们的用途(生成您在视图中重用的简短HTML片段)。

所以也许你想要这个:

public static IHtmlString GetEnumValue<T>(this HtmlHelper helper, int value) where T : struct, IConvertible
{
    return MvcHtmlString.Create(EnumHelper<T>.GetEnumValue(value).ToString());
}

然后在您的视图中,您将能够像这样调用它(请注意,如果您想将泛型用作<并且>被视为特殊处理,则可能需要将其包装在括号中Razor解析器的字符):

@(Html.GetEnumValue<MyEnumHere>(1))