sharp net instanciar eventos evento ejemplos deshabilitar crear asp.net .net css embedded-code

asp.net - net - instanciar un evento c#



Asignar propiedad visible del botón a un resultado de método estático (5)

¿Qué tal si lo hacemos en el código subyacente, por ejemplo en Page_Load?

public void Page_Load( object sender, EventArgs e ) { btndisplayrole.Visible = WebApplication1.SiteHelper.IsUserInRole("Admin"); }

Estoy tratando de ocultar el botón según el rol del usuario usando el siguiente código:

<asp:Button ID="btndisplayrole" Text="Admin Button" Visible=''<%= WebApplication1.SiteHelper.IsUserInRole("Admin") %>'' runat="server" OnClick="DisplayRoleClick" />

Pero cuando ejecuto el código anterior, aparece el siguiente mensaje de error:

No se puede crear un objeto de tipo ''System.Boolean'' a partir de su representación de cadena ''<% = WebApplication1.SiteHelper.IsUserInRole ("Admin")%>'' para ''Visible''


El siguiente código funcionó:

Visible=''<%# WebApplication1.SiteHelper.IsUserInRole("Admin") %>''

¡Tenga en cuenta que los anteriores usan la expresión vinculante!


Tipo de problema interesante. Pero como dice el mensaje de error, la cadena <%= WebApplication1.SiteHelper.IsUserInRole("Admin") %> no se puede convertir en booleana.

Lamentablemente, no puedo explicar por qué la expresión no se evalúa, sino que se trata como una cadena.

La razón por la cual su expresión <%# %> funciona como se espera, es porque se trata de manera muy diferente. Cuando la página se compila en una clase, el compilador crea un controlador de eventos similar a esto:

public void __DataBindingButton2(object sender, EventArgs e) { Button button = (Button) sender; Page bindingContainer = (Page) button.BindingContainer; button.Visible = HttpContext.Current.User.IsInRole("admin"); }

y enlaza este método hasta el evento Control.Databinding en su control. Como puede ver, el <%# %> es esta vez tratado correctamente como código de servidor, y no solo como una cadena aleatoria.

Así que supongo que la solución es usar enlace de datos o ir al código subyacente como sugiere Andreas Knudsen.


Como una solución alternativa:

<% if (WebApplication1.SiteHelper.IsUserInRole("Admin")) {%> <asp:Button ID="btndisplayrole" Text="Admin Button" runat="server" OnClick="DisplayRoleClick" /> <%} %>


Visible=''<%= WebApplication1.SiteHelper.IsUserInRole("Admin").ToString() %>''

O

Visible=<%= WebApplication1.SiteHelper.IsUserInRole("Admin") %>