net - postback from javascript c#
Devolución de ASP.net-Desplácese hasta una posición específica (7)
En su caso, le sugiero que mantenga el valor predeterminado de Page.MaintainScrollPositionOnPostBack, y use la función de desplazamiento de javascript puro
function scrollToDiv()
{
document.getElementById(''yourDiv'').scrollIntoView();
}
Y llámelo al inicio de la página con un pequeño retraso de 1 ms (nuevamente, solo en javascript)
setTimeout(scrollToDiv, 1);
Y finalmente, llámelo desde el código C # detrás, con el RegisterStartupScript (js ejecutado después de que se haya cargado toda la página):
ScriptManager.RegisterStartupScript(Page, typeof(Page), "ScrollToADiv", "setTimeout(scrollToDiv, 1);", true);
Así, se evitará cualquier desplazamiento automático asp.
Tengo una página de ASP.net WebForms que tiene mucho contenido en la parte superior de la pantalla. Tiene un botón de enlace que publicará de nuevo en la página y mostrará otra sección de la página. Cuando la página se actualice, me gustaría establecer el enfoque y desplazarme hacia abajo a esta sección de la página.
Traté de hacer
txtField.Focus()
en mi código, detrás, establecerá el enfoque e intentará desplazarse hacia allí, pero luego se desplazará hacia la parte superior. El foco todavía está en mi cuadro de texto, pero la posición de la pantalla está en la parte superior. El enlace está en la parte superior de la pantalla que está causando la devolución de datos. Quiero desplazarme hasta la parte inferior de la pantalla. Lo hace brevemente y luego se desplaza hacia la parte superior.
He intentado configurar
Page.MaintainScrollPositionOnPostback = false;
Pero eso tampoco parece ayudar.
¿Hay alguna manera de forzarlo para que vaya a una posición específica? ¿Es posible agregar una etiqueta de anclaje a la URL cuando hago una devolución utilizando un botón o un botón de enlace?
Este se desplaza automáticamente a la división deseada en asp.net Control Esta es una función, llámela desde el lugar que desee y también descargue el archivo de script Java
OnClientClick = "return scrollGrid ()"
function scrollGrid1 () {$ (''html, body''). animate ({scrollTop: $ (''# Div1''). offset (). top}, ''slow'')}
He intentado la respuesta de Matthieu Charbonnier , pero no funcionó a menos que haya agregado
" window.scrollTo = function () { };"
como se sugirió en http://gnidesign.blogspot.com.au/2011/06/how-to-maintain-page-scroll-on-postback.html
He creado un método auxiliar, que funciona en Chrome, FireFox e IE.
public static void ScrollToControl( Page page, string clientId, bool alignToTop)
{
//NOTE: if there are more than one call on the page, first one will take preference
//If we want that last will take preference, change key from MethodBase.GetCurrentMethod().Name to anchorName
//recommended in http://gnidesign.blogspot.com.au/2011/06/how-to-maintain-page-scroll-on-postback.html
String script = " window.scrollTo = function () { };" + Environment.NewLine;
script += String.Format("document.getElementById(''{0}'').scrollIntoView({1});" , clientId, alignToTop.JSToString());
page.ClientScript.RegisterStartupScript(TypeForClientScript(), MethodBase.GetCurrentMethod().Name, script, true );
//return script;
}
public static string JSToString(this bool bValue)
{
return bValue.ToString().ToLower();
}
Use getElementById (''{0}''). ScrollIntoView es más simple que location.hash, porque no necesita agregar un elemento de ancla adicional.
El parámetro alignToTop es muy conveniente de especificar si desea mostrar el control en la parte superior o inferior de la pantalla.
Puede usar el siguiente código si tiene un ancla para la ubicación:
ClientScript.RegisterStartupScript(this.GetType(), "hash", "location.hash = ''#MOVEHERE'';", true);
yo tengo
<asp:MultiView ID="mvAriza" runat="server">
<asp:View ID="View14" runat="server">
............ .......
</asp:View>
</asp:MultiView>
en la página * .aspx. Y en la página * .aspx.cs, haga clic en un botón.
Page.SetFocus(mvAriza.ClientID);
Funciona muy bien
Page.MaintainScrollPositionOnPostBack = true;
debería llevarlo de vuelta a la misma posición en la pantalla, pero podría usar AJAX, o podría usar SetFocus()
para enfocarse en un control específico después de la devolución:
Page.MaintainScrollPositionOnPostback = true
parece funcionar bien.