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 HtmlHelperExtensions在视图mvc3 asp.net中不可见_Asp.net Mvc_Asp.net Mvc 3_Html Helper - Fatal编程技术网

Asp.net mvc HtmlHelperExtensions在视图mvc3 asp.net中不可见

Asp.net mvc HtmlHelperExtensions在视图mvc3 asp.net中不可见,asp.net-mvc,asp.net-mvc-3,html-helper,Asp.net Mvc,Asp.net Mvc 3,Html Helper,我为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 ComboB

我为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());
    }
使用系统;
使用System.Linq.Expressions;
使用系统文本;
使用System.Web.Mvc;
使用System.Web.Mvc.Html;
名称空间App.MvcHtmlHelpers
{
公共静态类HtmlHelperExtensions
{
公共静态MvcHtmlString组合框(HtmlHelper html、字符串名称、SelectList项、字符串selectedValue)
{
var sb=新的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=“marginleft:-199px;宽度:179px;高度:1.2em;边框:0;“}));
返回MvcHtmlString.Create(sb.ToString());
}
公共静态MvcHtmlString ComboBoxFor(HtmlHelper html、表达式、选择列表项)
{
var me=(MemberExpression)expression.Body;
var name=me.Member.name;
var sb=新的StringBuilder();
sb.Append(html.DropDownList(name+“_hidden”,items,new{@style=“width:200px;”,@onchange=“$('input#“+name+”)).val($(this.val());”)));
sb.Append(html.TextBoxFor(表达式,新的{@style=“margin left:-199px;宽度:179px;高度:1.2em;边框:0;“}));
返回MvcHtmlString.Create(sb.ToString());
}
我也在我的网站web配置中注册了它:

<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)%%>扩展方法中缺少
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());
    }

此外,您提供的
导入命名空间
似乎与扩展方法的命名空间不相同。但是,将它们添加到
web.config
中应该已经涵盖了所有内容。

您可能缺少
关键字:

public static MvcHtmlString组合框(此HtmlHelper html、字符串名称、SelectList项、字符串selectedValue)

另外,如果您在
视图
目录中检查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>


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

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

我把它添加到视图文件夹中的web.config中(尽管奇怪的是它是灰色的)。为了回答前面的评论,我实际上使用了ASP.Net视图,因为我是MVC新手,不想与Razor+MVC较劲


它现在工作得很好,谢谢!

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