Win 7 IIS 7.5 странное поведение с системой.ComponentModel.BrowseableAttribute
Я просто хочу посмотреть, будут ли другие вести себя так же, как я.
У меня есть класс gridviewex, который расширяет GridView. Одно из свойств в этом классе имеет свойство Browsable(true) в качестве аннотации. Это позволяет (по крайней мере, до IIS 7.5 это было) задать свойство в разметке. Но в Windows 7 IIS 7.5 он выдает ошибку синтаксического анализатора. Обратите внимание, что на сервере Win 2008 с IIS 7.5 приложение работает нормально.
Поэтому мне интересно, если это какая-то настройка IIS 7.5 в Win7, которая портит его вверх.
Шаги для воспроизведения
A) создать новый ASP.Net приложение, используйте 4.0 для версии framework
B) создайте новый класс под названием GridViewEx (get / set - это просто фиктивный код, не важно):
namespace GUI.Controls
{
public class GridViewEx : GridView
{
[Browsable(true)]
[Description("my test")]
public int VirtualItemCount
{
get
{
return 42;
}
set
{
int x = value;
int y = x + x;
}
}
}
}
C) По Умолчанию.aspx, зарегистрируйте префикс тега (измените WebApplication1 на то, что вы назвали своим проектом). Эта строка должна идти прямо под директивой Page.
<%@ Register TagPrefix="common" Namespace="GUI.Controls" Assembly="WebApplication1" %>
D) По Умолчанию.aspx, добавьте это к вашему контенту:
<common:GridViewEx runat="server" ID="gv" VirtualItemCount="-1">
</common:GridViewEx>
Если я запущу это приложение на IIS 7.0 или более ранней версии, я не получаю ошибок. Однако на Win 7 IIS 7.5 он выдает следующую ошибку:
Parser Error
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.
Parser Error Message: The 'VirtualItemCount' property cannot be set declaratively.
Я не понимаю, почему я получаю ошибку на Win 7 IIS 7.5, но не на более ранних версиях IIS и не на IIS 7.5 на сервере Win 2008. Есть идеи?
1 ответ:
Хорошо, я нашел хак, чтобы сделать эту работу. Добавил эти атрибуты в
VirtualItemCount
:[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] [EditorBrowsable(EditorBrowsableState.Always)] [Bindable(true)]
Теперь я больше не получаю ошибку синтаксического анализатора. Я не понимаю, почему я должен был добавить их, чтобы сделать в работе на моей машине Win 7, но на сервере я протестировал его на эти дополнительные атрибуты не нужны (и моя машина Win 7 и сервер находятся на IIS 7.5). Думаю, это останется тайной.
Большое спасибо человеку, который ответил на этот вопрос, так как он направил меня в правильном направлении.