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") %>