我认为这将是一个标准的任务,但我得到了很多困难,所以我寻求帮助。
我有一个在我的视图中频繁使用的下拉列表,现在我有很多具有相同逻辑的@Html.DropDown(),我认为这是一个用自定义html扩展替换它的好地方。
我不会描述我的项目结构,我只会发布它的截图:

因此,在HtmlExtensions.cs中,我创建了一个方法,我认为我需要从网络上的某个地方查看示例。该方法如下所示:
public static MvcHtmlString YesNoNotApplicableDDown(this HtmlHelper html)
{
return MvcHtmlString.Create("<select class=\"YesNoNotApplicable\"> <option value=\"1\">Yes</option> <option value=\"2\">No</option><option value=\"3\">NotApplicable</option></select>");
}然后,我将名称空间添加到Views下的web.config中:
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="MCSResources" />
<add namespace="MaintenanceCheckSystem.Utils.HtmlExtensions" />
</namespaces>
</pages>事实上,我在一开始就尝试了使用和不使用项目的名称,所以我也测试了一下:
<add namespace="Utils.HtmlExtensions" />然后在我的一个视图中,我尝试了@Html.Ye..,但没有得到任何提示,当我检查我的自定义方法不在那里时。我不知道我是否遗漏了什么,或者我做错了什么(可能两者都有),那么我如何才能让它工作呢?
发布于 2013-05-23 17:23:25
初始答案
你的扩展类是一个公共的静态方法吗?您的示例代码没有显示类定义。
这是requirements for extension methods中的一个。
更新
您可以这样说,您添加了如下名称空间:
<add namespace="Utils.HtmlExtensions" />但这真的是命名空间吗?命名空间不是这样的吗:
<add namespace="MaintenanceCheckSystem.Utils" />类名称不应包含在using语句中。
如果您在web.config中注册名称空间,同样没有类名,情况也类似。
发布于 2013-05-23 17:10:49
您可以尝试在web.config中注册此命名空间
<add namespace="MaintenanceCheckSystem.Utils" />并调用视图中的助手,如下所示:
@HtmlExtensions.YesNoNotApplicableDDown()发布于 2013-05-23 17:05:17
写
@using MaintenanceCheckSystem.Utils.HtmlExtensions在.cshtml文件中
更新:@using MaintenanceCheckSystem.Utils
https://stackoverflow.com/questions/16709286
复制相似问题