2010-12-08 46 views
3

好了,所以它出現在.NET framework API docs的CommandEventArg類的CommandArgument屬性的類型是「對象」暗示我可能會分配給它的其他東西比一個String對象的但我用下面的代碼得到一個InvalidCastException:如何使用.NET CommandArgument作爲非字符串對象?

[ASPX代碼]

... 
<asp:Button ID="Button1" runat="server" CommandArgument='<%# context %>' oncommand='reviewContext' </asp:Button> 
... 

[aspx.cs代碼隱藏代碼]

... 
public Enum Context { C1, C2, C3 } 

public Context context { get { return Context.C1; } } 
... 
public void reviewContext (object sender, CommandEventArg e) {  
    if((Context) e.CommandArgument == Context.C1) { /*Do something in context of C1 */} 
} 

爲什麼禁忌指定字符串以外的CommandEventArg正確的事TY?

回答

2

因爲它需要在HTML中渲染項目,如果它不能使它成爲一個字符串,它如何渲染。

return Context.C1.ToString() 

這將工作正常。

+1

非常感謝Hogan,我認爲......你說的服務HTML必須包含某種文本才能作爲按鈕響應的一部分進行回發?所以我想我的問題是,「爲什麼CommandEventArg API會說它可以是一個對象?」 – Travis 2010-12-08 19:38:36

1

你可以使用你的枚舉,你只是不能在HTML端做它。 HTML端特別是涉及的類的字符串表示。你可以,但是,分配給該數據綁定事件的函數,返回的什麼是必要的字符串表示,所以

public Context context { get { return Context.C1; } } 

成爲

public string context { get { return Context.C1.ToString(); } } 

然而,爲了使用,一旦你的枚舉」再在reviewContext你需要解析枚舉出來,以作出比較:

(Context)Enum.Parse(typeof(Context), "C1"); 

注:你仍然可以使用字符串進行比較,但是這打破了我認爲的枚舉點。

+0

感謝Joel,這基本上就是我最終做的事情......我猜想我認爲ASP.NET引擎會將我的枚舉轉換爲字符串並返回到服務器上,但正如您演示的那樣,自己做的不是大不了。 – Travis 2010-12-09 21:54:39

相關問題