开发者

How to use a .NET CommandArgument as a non-string object?

开发者 https://www.devze.com 2023-01-30 03:06 出处:网络
Ok so it appears in the .NET framework API docs that the CommandArgument property of the CommandEventArg class开发者_高级运维 is of type \'object\' suggesting that I might assign to it something other

Ok so it appears in the .NET framework API docs that the CommandArgument property of the CommandEventArg class开发者_高级运维 is of type 'object' suggesting that I might assign to it something other than a string object yet I get an InvalidCastException using the code below:

[aspx code]

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

[aspx.cs codebehind code]

...
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 */}
}

Why is it tabu to assign something other than a string to the CommandEventArg property?


Because it needs to render the item in the HTML, if it can't make it a string how can it render.

return Context.C1.ToString()

This will work fine.


You can use your enum, you just can't do it in the HTML side. The HTML side is specifically a string representation of the classes involved. You can, however, assign a function to this databinding event, and return the string representation of what is necessary, so

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

becomes

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

However, in order to use the enums once you're in reviewContext you'll need to parse the enum out in order to make the comparison:

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

Note: You can still use the strings to make the comparison, but that defeats the point of the enum I think.

0

精彩评论

暂无评论...
验证码 换一张
取 消