Asp.net mvc HtmlHelperExtensions在视图mvc3 asp.net中不可见
我为HTML自定义扩展添加了一个类: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
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中