Mam szczególnie dużą formę na stronie. Po sprawdzeniu poprawności formularza i niepoprawnym polu chcę przewinąć okno do tej kontrolki. Wywołanie funkcji Focus() nie wydaje się tego robić. Znalazłem sposób obejścia kodu JavaScript, aby przewinąć okno do formantu, ale czy jest coś wbudowanego w ASP.NET?ASP.NET: Przewiń, aby kontrolować
Odpowiedz
Powinieneś patrzy plugin jQuery i scrollTo
Dodawanie MaintainScrollPositionOnPostback jest najbliżej że ASP.NET ma wbudowane, ale niekoniecznie będzie przeskoczyć do pola nieprawidłowej (ów).
<%@ Page MaintainScrollPositionOnPostback="true" %>
Czy jesteś pewien, że Focus() nie zrobi tego, co opisujesz? Pod maską jest to zasadniczo "obejście w języku JavaScript" - zapisuje niektóre JS na stronie, która wywołuje fokus() na formancie z pasującym identyfikatorem:
Niezależnie od tego, która kontrola miała fokus(), który był ostatni przed zakończeniem strony przetwarzanie zapisuje to na stronie:
<script type="text/javascript">
//<![CDATA[
WebForm_AutoFocus('txtFocus2');//]]>
</script>
Osiągnąłem coś podobnego używając podstawowego HTML fragments. Po prostu zostawić element z rozpoznaną ID:
<span id="CONTROL-ID"></span>
A potem za pośrednictwem skryptu na stronie serwera zmienić URL:
window.location += "#CONTROL-ID";
W pierwszym przypadku strona nie będzie przeładować, po prostu przewinie się do kontroli.
SO Wierzę, że problem polega na tym, że próbowałem skupić się na HtmlGenericControls zamiast WebControls.
Właśnie zakończyła się robi obejście oparciu off:
http://ryanfarley.com/blog/archive/2004/12/21/1325.aspx http://www.codeproject.com/KB/aspnet/ViewControl.aspx
... w interesie czasie.
public static void ScrollTo(this HtmlGenericControl control)
{
control.Page.RegisterClientScriptBlock("ScrollTo", string.Format(@"
<script type='text/javascript'>
$(document).ready(function() {{
var element = document.getElementById('{0}');
element.scrollIntoView();
element.focus();
}});
</script>
", control.ClientID));
}
Zastosowanie:
if (!this.PropertyForm.Validate())
{
this.PropertyForm.ErrorMessage.ScrollTo();
failed = true;
}
(Choć wydaje Page.RegisterClientScriptBlock() nie jest zalecane dla Page.ClientScript.RegisterClientScriptBlock()).
Czy używasz podsumowania sprawdzania poprawności na swojej stronie?
Jeśli tak, ASP.NET renders some javascript to automatically scroll to the top of the page, który może również zastąpić automatyczne zachowanie sprawdzania po stronie klienta, aby ustawić ostatnią nieprawidłową kontrolę.
Co więcej, czy sprawdziłeś poprawność strony klienta?
Jeśli przyjrzeć javascript generowanego przez walidacji po stronie klienta powinien pojawić metody takie jak to:
function ValidatorValidate(val, validationGroup, event) {
val.isvalid = true;
if ((typeof(val.enabled) == "undefined" || val.enabled != false) &&
IsValidationGroupMatch(val, validationGroup)) {
if (typeof(val.evaluationfunction) == "function") {
val.isvalid = val.evaluationfunction(val);
if (!val.isvalid && Page_InvalidControlToBeFocused == null &&
typeof(val.focusOnError) == "string" && val.focusOnError == "t") {
ValidatorSetFocus(val, event);
}
}
}
ValidatorUpdateDisplay(val);
}
Uwaga wywołanie ValidatorSetFocus, który jest dość długi metoda, która próbuje ustawić ostrość z kontrolą, o którym mowa, lub jeśli masz kilka błędów, do ostatniej kontroli, który został zatwierdzony, stosując (ostatecznie) następujące wiersze:
if (typeof(ctrl.focus) != "undefined" && ctrl.focus != null) {
ctrl.focus();
Page_InvalidControlToBeFocused = ctrl;
}
aby uzyskać ten problem do pracy, to byłoby idealnie trzeba upewnić się, że wszystkie twoje walidatory są ustawione t o po stronie klienta - weryfikatory po stronie serwera będą oczywiście wymagały odświeżenia strony, co może wpływać na pewne rzeczy (np. tracić ostrość/pozycję) - ustawienie parametru MaintainScrollPositionOnPostBack na wartość true prawdopodobnie spowodowałoby ponowne załadowanie strony do przycisku przesyłania, a nie nieprawidłowy element formularza.
Korzystanie ze strony serwera Metoda AFFocus spowoduje, że program ASP.NET wyrenderuje część javascript "na stronie" (tj. W pobliżu dolnej części strony), ale może to zostać zastąpione przez jeden z innych mechanizmów wymienionych powyżej .
Bardzo prostym rozwiązaniem jest ustawić właściwość SetFocusOnError z RequiredFieldValidator (lub cokolwiek sterowania walidator używasz) do prawdziwej
http://weblogs.asp.net/dfindley/archive/2007/06/29/a-quick-fix-for-the-validator-setfocusonerror-bug.aspx – softwaredeveloper
Wklej następujący Javascript:
function ScrollToFirstError() {
Page_ClientValidate();
if (Page_IsValid == false) {
var topMostValidator;
var lastOffsetTop;
for (var i = 0; i < Page_Validators.length; i++) {
var vld = Page_Validators[i];
if (vld.isvalid == false) {
if (PageOffset(vld) < lastOffsetTop || lastOffsetTop == undefined) {
topMostValidator = vld;
lastOffsetTop = vld.offsetTop;
}
}
}
topMostValidator.scrollIntoView();
}
return Page_IsValid;
}
function PageOffset(theElement) {
var selectedPosY = 0;
while (theElement != null) {
selectedPosY += theElement.offsetTop;
theElement = theElement.offsetParent;
}
return selectedPosY;
}
Następnie zadzwonić ScrollToFirstError() w OnClientClick przycisku, który jest zapisywany, upewnij się, że przycisk ma także funkcję PrzyczynyValidation = true.
Masz to.
Page.MaintainScrollPositionOnPostBack = False
Page.SetFocus(txtManagerName)
A gdzie dokładnie piszesz 'Page.MaintainScrollPositionOnPostBack = Fałszywe? –
- 1. Przewiń, aby odświeżyć na lwie
- 2. Przewiń do podsumowania sprawdzania poprawności - ASP.net MVC
- 3. Przewiń UITableView, aby nagłówek był niewidoczny.
- 4. Zatrzymaj nagłówek, przewiń GridView
- 5. ASP.NET WebAPI: Jak kontrolować zawartość napisów zwróconych do klienta?
- 6. Jak kontrolować wyświetlanie warunkowe widoków częściowych w ASP.NET MVC
- 7. Jak kontrolować elementy na stronie głównej asp.net ze strony podrzędnej
- 8. Przewiń, aby usunąć, gdy jest już w trybie edycji.
- 9. Przewiń po najechaniu kursorem myszy, kliknij, aby przyspieszyć.
- 10. Jak mogę kontrolować PhantomJS, aby pominąć pobieranie jakiegoś zasobu?
- 11. Ionic Przewiń do elementu
- 12. UITableView Przewiń do sekcji
- 13. Przewiń wydarzenie w AngularJS
- 14. Przewiń wydarzenie dla Meteor'a
- 15. Catch Textbox Przewiń wydarzenie?
- 16. Przewiń za pomocą klawiatury?
- 17. WPF - Przewiń bez ostrości
- 18. Jak kontrolować głośność multimediów?
- 19. C# kontrolować wyrównanie danych
- 20. kontrolować wskazówki prostego_formularza
- 21. Jak kontrolować zachowanie json_encode?
- 22. Jak kontrolować wysokość granicy?
- 23. Textarea automatycznie przewiń do dołu
- 24. Java - Przewiń obraz przeciągając myszką
- 25. Przewiń do 10px powyżej elementu
- 26. UICollectionView przewiń do określonej sekcji
- 27. Przewiń listę z wtyczką slimscroll
- 28. Jak kontrolować przycisk powrotu sprzętu?
- 29. Rejestrowanie PL/SQL - jak kontrolować?
- 30. Jak kontrolować gdzie Meteor biegnie
To nie jest to, co on opisuje - chce, aby strona przeskoczyła do części formularza, której nie udało się sprawdzić, niekoniecznie pozycji użytkownika w ostatnim czasie. –
Nie odpowiada na pytanie, ale rozwiązał * mój * problem. Dzięki! –