Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 调用通用扩展html帮助程序方法时发生ASp.NET MVC 3.0错误_Asp.net Mvc 3_Html Helper - Fatal编程技术网

Asp.net mvc 3 调用通用扩展html帮助程序方法时发生ASp.NET MVC 3.0错误

Asp.net mvc 3 调用通用扩展html帮助程序方法时发生ASp.NET MVC 3.0错误,asp.net-mvc-3,html-helper,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>

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

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);
        }
    }
}
var value = Html.GetEnumValue<MyEnum>(1);
    @value
在编译时也不会出现错误

 @{
     Html.GetEnumValue<MyEnum>(1); //But then I am getting error during execution  
 }
还有一个问题,为什么在这种情况下它不起作用:

 @Html.GetEnumValue<MyEnumHere>(1)
执行过程中出现错误:

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


出于某种原因,将其解释为html标记(得到警告:警告1“MyEnum”元素未关闭。所有元素必须是自动关闭的或具有匹配的结束标记。),并且在这种情况下,我无法导航到扩展方法,但如果我从声明中删除
@
Html.GetEnumValue(thing.Id)
)我无法导航我的方法

通常Html帮助程序应该返回字符串,或者因为它们是用来返回字符串的(生成在视图中重用的短Html片段)

所以也许你想要这个:

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

@Joper,这很奇怪,因为它适用于我。可以使用@html安全地调用返回IHtmlString的html帮助程序。XXX@Darin迪米特洛夫:是的,很奇怪,我已经更新了question@Joper,好的,明白了。请参阅我的更新答案。如果使用泛型,则需要将调用括在括号中:
@(Html.GetEnumValue(1))
@Darin Dimitrov就是这样,是不是所有的通用助手都应该使用这种技巧?为什么会这样?@Joper,这是因为Razor解析器将
视为普通HTML标记。这适用于所有的通用助手。你能将代码发布到你的EnumHelper.GetEnumValue(value)?
 @Html.GetEnumValue<MyEnumHere>(1)
@using MyTypes.Enumerators
@inherits MvcContrib.FluentHtml.ModelWebViewPage<MyModel>

@foreach (var thing in Model.Stuff)
{
    @Html.GetEnumValue<MyEnum>(thing.Id)
}
public static IHtmlString GetEnumValue<T>(this HtmlHelper helper, int value) where T : struct, IConvertible
{
    return MvcHtmlString.Create(EnumHelper<T>.GetEnumValue(value).ToString());
}
@(Html.GetEnumValue<MyEnumHere>(1))