2009-04-25 45 views
5

我只是在ASP.NET中使用Javascript進入更多客戶端的東西,並且有些東西讓我感到困擾,希望有人能夠解釋。爲什麼intellisense不顯示.NET控件的所有屬性/屬性?例如,在一個RadioButtonListControl一個ListItem:ASP.NET智能感知與客戶端屬性

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

智能感知不顯示的onclick屬性(或叫屬性?)的列表項的,但可以肯定的作品。爲什麼不顯示?還是我太依賴智能感知? :-)或者我應該在代碼隱藏中聲明這個東西?

回答

2

問題是,針對Web服務器控件的智能感知不顯示客戶端事件並僅列出在服務器上引發的事件。如果您爲了同一目的而使用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

這取決於您正在使用的控件和屬性的很多次。我知道ASP button控件將在智能感知中顯示onclickonclientclick屬性。這可能是因爲ASP.NET不完全支持的listitemonClick屬性(而不是說在listbox/dropdownlist /等控制selectedindexchanged屬性)

+0

嗯...所以我不應該使用它們?我已經測試過它,它可以工作,但如果我將來遇到意想不到的結果,我不想惹它。我喜歡和ASP.NET一起工作,並且我剛剛開始使用Javascript,它確實很有趣,但由於某種原因,它們似乎並沒有像他們應該做的那麼好。 – 2009-04-25 16:36:02

+0

我應該在我上面的評論中增加一個免責聲明:我完全知道我自己缺乏經驗可能是問題所在。 – 2009-04-25 16:40:04

+0

約翰桑德斯用更權威的答案總結了它。如果它適合你,它會適用於你,但我不會推薦做一些實際上沒有支持的東西。 – TheTXI 2009-04-25 16:48:56

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>元件上呈現。在RadioButtonList的情況下,onclick屬性呈現在<input type="radio">元素上,但無法識別的oncluck元素呈現在封閉的<span>元素上。

請注意,顯然,oncluck事件永遠不會被解僱。

;-)

0

你沒有看到它在智能感知的原因是因爲「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」多次計數。所以雖然純粹主義者可能對練習有問題,但我認爲這很好用。

0

讓我們假設我們有一個會話超時 此類事件的觸發彈出消息。

像你應該有你的網上銀行 網絡應用程序。

因此,彈出消息彈出提示您有幾分鐘的時間用於完成與該特定 受保護的網站的在線體驗。

通常,如果你不做任何關於此事的事情,在 大約在同一時間消息彈出,應用程序將 註銷。

在客戶端,您可以使用JavaScript來計時 這些操作。

現在,讓我們假設您註銷的按鈕是 ,名爲「btnSignOut」。

如果要觸發從 線JS的同樣的動作,對超時,你應該有這樣的事情:如通過點擊

if(timeout){ 
; 
} 

將觸發同一事件「btnSignOut」 linkBut​​ton。

Source