2010-12-08 43 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

相关问题