ASP.NET Intellisense与客户端属性

ASP.NET Intellisense与客户端属性,asp.net,intellisense,Asp.net,Intellisense,我正在使用Javascript深入ASP.NET中的更多客户端内容,希望有人能解释一些困扰我的问题。为什么intellisense没有显示.NET控件的所有属性/属性?例如,RadioButtonListControl中的ListItem: <asp:ListItem Value="1" Text="Yes" onclick="alert('TEST1');" /> <asp:ListItem Value="0" Text="No" onclick="alert('TEST2'

我正在使用Javascript深入ASP.NET中的更多客户端内容,希望有人能解释一些困扰我的问题。为什么intellisense没有显示.NET控件的所有属性/属性?例如,RadioButtonListControl中的ListItem:

<asp:ListItem Value="1" Text="Yes" onclick="alert('TEST1');" />
<asp:ListItem Value="0" Text="No" onclick="alert('TEST2');" />


Intellisense不显示ListItem的onclick属性(或者称为属性?),但它确实有效。为什么不显示?还是我太依赖智能感知了?:-)还是应该在代码隐藏中声明这些内容?

这在很大程度上取决于您使用的控件和属性。我知道ASP
按钮
控件将在intellisense中显示
onclick
onclientclick
属性。可能是ASP.NET不完全支持
listitem
onClick
属性(与
listbox
/
dropdownlist
/etc控件上的
selectedindexchanged
属性相反)

listitem
类没有
onClick
属性

似乎
ListItem
实现了
IAttributesAccessor
接口,并且还有一个
属性
集合。记录如下:

获取该类不直接支持的ListItem的属性名称和值对的集合

以这种方式放置在标记上的属性在呈现控件时呈现。控制的细节有所不同。我尝试了一个包含以下内容的页面:

<asp:DropDownList ID="_ddl1" runat="server" >
    <asp:ListItem Text="Item 1" Value="Item1" onClick="foox();" oncluck="bar(this);" />
</asp:DropDownList>
<asp:ListBox ID="_listBox1" runat="server">
    <asp:ListItem Text="Item 1" Value="Item1" onClick="foox();" oncluck="bar(this);" />
</asp:ListBox>
<asp:RadioButtonList ID="_radioList1" runat="server">
    <asp:ListItem Text="Item 1" Value="Item1" onClick="foox();" oncluck="bar(this);" />
</asp:RadioButtonList>
<asp:ListItem Value="1" Text="Yes" Secret="Yes" onclick="alert('TEST1');" />
<asp:ListItem Value="0" Text="No" Secret="No" onclick="alert('TEST2');" />

对于
下拉列表
列表框
,这两个属性都在
元素上呈现。对于
RadioButtonList
,在
元素上呈现
onclick
属性,但在封闭的
元素上呈现未识别的
onclick
元素

请注意,
oncluck
事件显然从未触发


;-)

在intellisense中看不到它的原因是“onclick”不是ASP.Net。您会注意到,如果您执行以下操作:

<asp:DropDownList ID="_ddl1" runat="server" >
    <asp:ListItem Text="Item 1" Value="Item1" onClick="foox();" oncluck="bar(this);" />
</asp:DropDownList>
<asp:ListBox ID="_listBox1" runat="server">
    <asp:ListItem Text="Item 1" Value="Item1" onClick="foox();" oncluck="bar(this);" />
</asp:ListBox>
<asp:RadioButtonList ID="_radioList1" runat="server">
    <asp:ListItem Text="Item 1" Value="Item1" onClick="foox();" oncluck="bar(this);" />
</asp:RadioButtonList>
<asp:ListItem Value="1" Text="Yes" Secret="Yes" onclick="alert('TEST1');" />
<asp:ListItem Value="0" Text="No" Secret="No" onclick="alert('TEST2');" />

如果查看呈现为html的内容,您将看到“Secret”属性。因此,尽管ASP.Net将呈现您放入其中的任何属性,但它只为ASP.Net属性提供intellisense


就编码实践而言,我已经看到并使用“onclick”太多次了。因此,虽然纯粹主义者可能会对这种做法有问题,但我认为使用它是可以的。

问题在于intellisense for Web服务器控件不显示客户端事件,只列出服务器上引发的事件。如果将HTML服务器控件用于相同的目的,您将在Intellisense中看到(客户端JS)事件

另一个要考虑的问题是OnCutter事件不支持选项元素(至少不在伊江,虽然Firefox支持它很好)。您应该处理

onchange
客户端事件。例如:

<select id="htmlserverselect" runat="server" onchange="alert(this.value);">
  <option value="1">Yes</option>
  <option value="2">No</option>
</select>

对
不
假设有一条由会话触发的弹出消息 超时类型的事件

就像你应该为你的网上银行 web应用程序

因此,弹出的信息显示,您几乎没有 用更多的时间完成您的在线体验 安全网站

通常情况下,如果你对此不采取任何行动,在 大约在消息弹出的同时,应用程序将 签了你

在客户端,您可以使用JavaScript进行计时 这些行动

现在,让我们假设您退出的按钮是 称为“btnSignOut”

如果您想从一个 JS行,在超时时,您应该有如下内容:

这将触发与单击“btnSignOut”相同的事件 链接按钮


Hmmm。。。所以我不应该使用它们吗?我已经测试过了,它也能工作,但是如果我将来可能会遇到意想不到的结果,我不想弄乱它。我喜欢使用ASP.NET,我刚刚开始接触Javascript,它真的很震撼,但出于某种原因,这两个版本似乎没有发挥出应有的作用。我应该在上面的评论中添加一条免责声明:我完全意识到我自己的经验不足可能是问题所在。约翰·桑德斯用一个更权威的答案总结了这一点。如果它对你有效,它也会对你有效,但我不建议你做一些实际上不受支持的事情。我认为你的答案更直接地针对基本问题——智能感知,而@John的答案更笼统。我在回答中也试图这样做+1显然,listitem实现了IChicken接口,并被迫实现了“oncluck”事件:)“注意,oncluck事件从未被触发,显然”哈哈!这一定是真的吗?我在回答中注意到ASP按钮的intellisense显示onClientClick。服务器上未引发该事件?我可能对此感到困惑吗?是的,这是真的,因为OnClientClick是一个“服务器端属性”(不管是什么!),它确保控件在呈现时将onclick属性设置为指定的值。这对于一个特殊的web服务器控件来说是一个方便的度量,因为按钮通常需要在表单提交之前运行一些客户端代码。当你说它只列出在服务器上引发的事件,而这些事件似乎不太正确,因为OnClient Click实际上并没有在服务器上运行。我应该能够使用intellisense on web服务器控件同时看到服务器端和客户端事件,这似乎是一个有效的观点。如果我能做到,为什么不告诉我我能做到?这不是智力的观点吗?