Desactive la devolución de datos en un < ASP: LinkButton >
-
05-07-2019 - |
Pregunta
Tengo un control de botón de enlace ASP.NET en mi formulario. Me gustaría usarlo para javascript en el lado del cliente y evitar que vuelva a publicarse en el servidor. (Me gustaría usar el control de botón de enlace para poder ocultarlo y deshabilitarlo en algunos casos, por lo que no se prefiere una etiqueta recta).
¿Cómo evito que vuelva a publicarse en el servidor?
Solución
código ASPX:
<asp:LinkButton ID="someID" runat="server" Text="clicky"></asp:LinkButton>
Código detrás:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
someID.Attributes.Add("onClick", "return false;");
}
}
Lo que se reproduce como HTML es:
<a onclick="return false;" id="someID" href="javascript:__doPostBack('someID','')">clicky</a>
En este caso, lo que sucede es que la funcionalidad onclick se convierte en su validador. Si es falso, el " href " el enlace no se ejecuta; sin embargo, si es verdad el href será ejecutado. Esto elimina tu publicación de vuelta.
Otros consejos
Esto puede sonar como una respuesta inútil ... ¿Pero por qué estás usando un LinkButton para algo del lado del cliente? Use una etiqueta de anclaje HTML estándar y establezca su acción onclick
en su Javascript.
Si necesita que el servidor genere el texto de ese enlace, use un asp: Label
como el contenido entre las etiquetas de inicio y final del ancla.
Si necesita cambiar dinámicamente el comportamiento del script basado en el código del lado del servidor, considere asp: Literal
como una técnica.
Pero a menos que esté realizando una actividad del lado del servidor del evento Click del botón LinkBut, no parece que tenga mucho sentido utilizarlo aquí.
También puedes hacerlo
...LinkButton ID="BtnForgotPassword" runat="server" OnClientClick="ChangeText('1');return false"...
Y detiene la devolución de botón de enlace
Solo configura href = " # "
<asp:LinkButton ID="myLink" runat="server" href="#">Click Me</asp:LinkButton>
Creo que deberías investigar usando un control HyperLink. Es un control del lado del servidor (para que pueda manipular la visibilidad y eso desde el código), pero omite una etiqueta de ancla normal y no provoca una devolución de datos.
En C #, harías algo como esto:
MyButton.Attributes.Add("onclick", "put your javascript here including... return false;");
Solo he pasado por esto antes de unos minutos, la forma correcta de hacerlo es usar
OnClientClick
-
Return False ()
como la siguiente línea de código de ejemplo:
<asp:LinkButton ID="lbtnNext" runat="server" OnClientClick="findAllOccurences(); return false();" Visible="false"/>
Solo copié esa línea de mi código de trabajo.
En lugar de implementar el atributo:
public partial class _Default : System.Web.UI.Page{
protected void Page_Load(object sender, EventArgs e)
{
someID.Attributes.Add("onClick", "return false;");
}}
Uso:
OnClientClick="return false;"
dentro de asp: etiqueta LinkButton
llamar a la función javascript en el evento onclick.
¿Ha intentado utilizar OnClientClick
?
var myLinkButton = new LinkButton { Text = "Click Here", OnClientClick = "JavaScript: return false;" };
<asp:LinkButton ID="someID" runat="server" Text="clicky" OnClientClick="JavaScript: return false;"></asp:LinkButton>
Algo más que puedes hacer, si quieres conservar tu posición de desplazamiento es esto:
<asp:LinkButton runat="server" id="someId" href="javascript: void;" Text="Click Me" />
Es posible que también desee que la función del lado del cliente devuelva falso.
<asp:LinkButton runat="server" id="button" Text="Click Me" OnClick="myfunction();return false;" AutoPostBack="false" />
También puedes considerar:
<span runat="server" id="clickableSpan" onclick="myfunction();" class="clickable">Click Me</span>
Utilizo la clase en la que se puede hacer clic para establecer elementos como puntero, color, etc., de modo que su apariencia sea similar a una etiqueta de ancla, pero no tengo que preocuparme por que se vuelva a publicar o por tener que hacer el href = " ; javascript: void (0); " truco.
¿Por qué no usar un panel de actualización de ajax vacío y conectar el evento click del botón de enlace? De esta manera solo se actualizará el panel de actualización, evitando así una devolución de datos y permitiéndole ejecutar su javascript
Nadie parece estar haciendo esto así:
createEventLinkButton.Attributes.Add("onClick", " if (this.innerHTML == 'Please Wait') { return false; } else { this.innerHTML='Please Wait'; }");
Esta parece ser la única forma en que funciona.
En la función jquery ready puedes hacer algo como a continuación -
var hrefcode = $('a[id*=linkbutton]').attr('href').split(':');
var onclickcode = "javascript: if`(Condition()) {" + hrefcode[1] + ";}";
$('a[id*=linkbutton]').attr('href', onclickcode);
Para evitar la actualización de la página, si return false
no funciona con asp: LinkButton
use
href="javascript: void;"
o
href="#"
junto con OnClientClick = " return false; "
<asp:LinkButton ID="linkPrint" runat="server" CausesValidation="False" href="javascript: void;"
OnClientClick="javascript:self.print();return false;">Print</asp:LinkButton>
El código anterior llamará al navegador para imprimir sin actualizar la página.
use el enlace html en lugar del enlace asp y puede usar la etiqueta entre el enlace html para el lado del servidor control