Этот метод расширения не работает на двух отдельных машинах разработки:
public static string DdlTest(this HtmlHelper helper)
{
var si = new List<SelectListItem>();
si.Add(new SelectListItem() { Text = "1", Value = "1" });
si.Add(new SelectListItem() { Text = "2", Value = "2" });
return helper.DropDownList("test", si, new { Class = "Hey" });
}
Я получаю следующую ошибку:
Метод не найден: 'System.String System.Web.Mvc.Html.SelectExtensions.DropDownList (System.Web.Mvc.HtmlHelper, System.String, System.Collections.Generic.IEnumerable`1, System.Object)' .
Однако этот встроенный код действительно работает :
<%
var si = new List<SelectListItem>();
si.Add(new SelectListItem() { Text = "1", Value = "1" });
si.Add(new SelectListItem() { Text = "2", Value = "2" });
%>
<%= Html.DropDownList("test", si, new { Class = "Hey" })%>
Может кто-нибудь подтвердить, что я не схожу с ума!
Обратите внимание:
Он работает в VS2010 и .NET 4 beta 2.
Он работает в VS2010 с бета-версией MVC 2.
Это не не работает в VS2008 с MVC 1 !!
На на обеих машинах параллельно установлены VS2010 beta 2 и VS2008.
Я что-то здесь не так делаю?
Edit:
Пока что я взломал это, разобрав класс SelectExtensions и реализовав его сам, что работает. Интересно, что в дизассемблированном коде была неоднозначная ошибка вызова метода ... хотя я не уверен, что это только результат отражения.
Редактировать 2:
Чтобы сделать пример более понятным, предположим, что этот ASPX:
<%
var si = new List<SelectListItem>();
si.Add(new SelectListItem() { Text = "1", Value = "1" });
si.Add(new SelectListItem() { Text = "2", Value = "2" });
%>
<%= Html.DropDownList("test", si, new { Class = "Hey" })%>
<%= Html.TextBox("testing")%>
<%= Html.DdlTest1("test", si, new { Class = "Hey" })%>
<%= Html.DdlTest2("test", si, new { Class = "Hey" })%>
<%= Html.Test3()%>
И это в моем классе методов расширения:
using System.Web.Mvc;
using System.Web.Mvc.Html;
...
public static string DdlTest1(this HtmlHelper helper, string name,
IEnumerable<SelectListItem> items, object htmlAttributes)
{
return "Whatever";
}
public static string DdlTest2(this HtmlHelper helper, string name,
IEnumerable<SelectListItem> items, object htmlAttributes)
{
return helper.DropDownList(name, items, htmlAttributes);
}
public static string Test3(this HtmlHelper helper)
{
return helper.TextBox("testing");
}
<%= Html.DropDownList("test", si, new { Class = "Hey" })%>
будет работать
<%= Html.TextBox("testBox")%>
будет работать
<%= Html.DdlTest1() %>
будет работать
<%= Html.DdlTest2() %>
выдаст следующую ошибку:
Метод не найден: 'System.String System.Web.Mvc.Html.SelectExtensions.DropDownList (System.Web.Mvc.HtmlHelper, System.String, System.Collections.Generic.IEnumerable`1, System.Object)' .
<%= Html.DdlTest3() %>
выдаст следующую ошибку:
Метод не найден: 'System.String System.Web.Mvc.Html.InputExtensions.TextBox (System.Web.Mvc.HtmlHelper, System.String)'.
Таким образом, мы можем заключить, что ASPX может найти мои методы расширения, и даже обычные .NET. Но когда my extensions, в MVC 1, попробуйте вызвать стандартные расширения, проблема варит!
Редактировать 3:
Вздох.
Я нашел проблему, и я полагаю, во многих отношениях, приятель Аарона, ты был прав!
У меня есть ссылка на сборку в моем Web.Config, но я пропустил одну крошечную деталь:
Это действительно должно было быть прочитано:
Я не заметил этого зла, б * стар 2 там. Простите, спасибо за вашу помощь. Очки идут к тебе, Аарон, как ты и был прав!