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))