【问题标题】:HtmlHelperExtensions are not visible in view mvc3 asp.netHtml Helper Extensions 在视图 mvc 3 asp.net 中不可见
【发布时间】:2012-11-16 22:37:01
【问题描述】:

我为 HTML 自定义扩展添加了一个类:

using System;
using System.Linq.Expressions;
using System.Text;
using System.Web.Mvc;
using System.Web.Mvc.Html;

namespace App.MvcHtmlHelpers    
{
public static class HtmlHelperExtensions
{

    public static MvcHtmlString ComboBox(HtmlHelper html, string name, SelectList items, string selectedValue)
    {
        var sb = new StringBuilder();
        sb.Append(html.DropDownList(name + "_hidden", items, new { @style = "width: 200px;", @onchange = "$('input#" + name + "').val($(this).val());" }));
        sb.Append(html.TextBox(name, selectedValue, new { @style = "margin-left: -199px; width: 179px; height: 1.2em; border: 0;" }));
        return MvcHtmlString.Create(sb.ToString());
    }

    public static MvcHtmlString ComboBoxFor<TModel, TProperty>(HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression, SelectList items)
    {
        var me = (MemberExpression)expression.Body;
        var name = me.Member.Name;

        var sb = new StringBuilder();
        sb.Append(html.DropDownList(name + "_hidden", items, new { @style = "width: 200px;", @onchange = "$('input#" + name + "').val($(this).val());" }));
        sb.Append(html.TextBoxFor(expression, new { @style = "margin-left: -199px; width: 179px; height: 1.2em; border: 0;" }));
        return MvcHtmlString.Create(sb.ToString());
    }

我还在我的网站网络配置中注册了它:

<namespaces>
<add namespace="System.Web.Helpers" /> 
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />        
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
<add namespace="App.MvcHtmlHelpers"/>
</namespaces>

在我看来,我导入了命名空间:

<%@ Import Namespace="RSPWebApp.MvcHtmlHelpers" %>

但是当我在视图中调用它时,它无法识别自定义扩展。有人可以告诉我我可能错过了什么来帮助我吗?提前非常感谢! a.Street2, streetAddressListItems) %>

【问题讨论】:

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


    【解决方案1】:

    您可能缺少this 关键字:

    public static MvcHtmlString ComboBox(this HtmlHelper html, string name, SelectList items, string selectedValue)

    另外,如果检查您的 Views 目录中的 Web.config 是否有类似的内容:

    <system.web.webPages.razor>
        <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <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="RSPWebApp.MvcHtmlHelper" />
          </namespaces>
        </pages>
    </system.web.webPages.razor>
    

    似乎您必须在 Views 文件夹中将命名空间显式添加到 Razor 引擎本身,而不是项目 Web.config。

    【讨论】:

    • 我认为我们无法判断 OP 是否使用 Razor 视图。
    • @JofryHS,是正确的,您缺少“this”关键字并且将引用放在错误的 Web.Config 中
    【解决方案2】:

    您的扩展方法中缺少 this 关键字。试试这个:

    public static MvcHtmlString ComboBox(this HtmlHelper html, string name, SelectList items, string selectedValue)
        {
            var sb = new StringBuilder();
            sb.Append(html.DropDownList(name + "_hidden", items, new { @style = "width: 200px;", @onchange = "$('input#" + name + "').val($(this).val());" }));
            sb.Append(html.TextBox(name, selectedValue, new { @style = "margin-left: -199px; width: 179px; height: 1.2em; border: 0;" }));
            return MvcHtmlString.Create(sb.ToString());
        }
    

    此外,您提供的 Import Namespace 似乎与您的扩展方法不是同一个命名空间。但是,将它们添加到 web.config 无论如何应该都能满足您的需求。

    【讨论】:

      【解决方案3】:

      感谢大家的帮助。我确实在我的 HTMLHelper 类中错过了“this”关键字(它最初在我的 resharper 中出现了红色,所以我不应该一直相信它!)

      然后我将它添加到 Views 文件夹中的 web.config 中(尽管奇怪的是它是灰色的)。要回答以前的评论,我实际上是在使用 ASP.Net 视图,因为我是 MVC 新手,不想与 Razor+MVC 搏斗。

      现在可以正常使用了,谢谢!

      【讨论】:

        猜你喜欢
        • 2011-08-09
        • 2011-02-14
        • 1970-01-01
        • 2014-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多