ASP.NET智能感知与客户端属性

时间:2009-04-25 16:12:08

标签: 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');" />

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

5 个答案:

答案 0 :(得分:2)

在很多时候,你使用的控件和属性都有很大的不同。我知道ASP button控件会在intellisense中显示onclickonclientclick属性。可能是ASP.NET不完全支持onClick的{​​{1}}属性(而不是listitem / {{1}上的selectedindexchanged属性。 / etc控件)

答案 1 :(得分:2)

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

要考虑的另一个问题是选项元素不支持onclick事件(至少在IE中不支持,尽管Firefox支持它很好)。您应该处理onchange客户端事件。一个例子:

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

答案 2 :(得分:1)

ListItem类没有onclick属性。

ListItem似乎实现了IAttributesAccessor界面,并且还有一个Attributes集合。这记录为:

  

获取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>

对于DropDownListListBox,两个属性都在<Option>元素上呈现。对于RadioButtonListonclick元素会在<input type="radio">元素上呈现,但无法识别的oncluck元素会在封闭的<span>元素上呈现。

请注意,oncluck事件从未被触发过。

- )

答案 3 :(得分:0)

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

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

如果你看看渲染到html的内容,你会看到“秘密”属性。因此,虽然ASP.Net将呈现您放置的任何属性,但它只会为ASP.Net属性提供智能感知。

就编码实践而言,我已经看过并使用过多次“onclick”来计算。因此,虽然纯粹主义者可能会对练习产生问题,但我认为这样做很好。

答案 4 :(得分:0)

  

我们假设我们有一个会话触发的弹出消息   超时类型的事件。

     

就像你应该拥有的网上银行一样   Web应用程序。

     

因此,弹出的消息显示你很少   更多时间来完成您的在线体验   安全的网站。

     

通常情况下,如果你对此没有采取任何行动,请参阅   大约在消息弹出的同时,应用程序将会   签你。

     

在客户端,您有JavaScript用于计时   那些行动。

     

现在,让我们说出来的按钮是   叫做“btnSignOut”。

     

如果你想从a触发相同的动作   JS的一行,在超时时,你应该有这样的东西:

if(timeout){
;
 }
  

这将触发与点击“btnSignOut”相同的事件   LinkBut​​ton的。

Source