Porównaj ceny domen i usług IT, sprzedawców z całego świata

Podsumowanie sprawdzenia ASP.Net powoduje, że strona przechodzi na górę


Mam prosty formularz z kilkoma wymaganymi walidatorami pól i kontrolką walidacji przestawnej. Kiedy przesyłam formularz, walidacja

klient

spowoduje, że formularz zostanie przeniesiony na górę strony. Jeśli usunę podsumowanie transakcji, strona nie zostanie przeniesiona.
Oto krótki przykład:
<asp:TextBox ID="test" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="testrequired" runat="server" ControlToValidate="test">*</asp:RequiredFieldValidator>
<asp:ValidationSummary ID="summary" runat="server"/>
<asp:Button ID="submit" runat="server" Text="submit"/>

Próbowałem ustawić
SetFocusOnError = "true"
na wymaganym walidatorze pól i
MaintainScrollPositionOnPostback = "true"
dla chichotu - nawet jeśli nie jest to postback - bez skutku. Czy istnieje znane rozwiązanie tego problemu?

EDIT

:
Znalazłem problem w pliku js wygenerowanym przez WebResource.axd. Wydaje się, że wszystko sprowadza się do jednej linii w funkcji
ValidationSummaryOnSubmit ()
.
line 534: window.scrollTo(0,0);

Jakieś pomysły, jak to usunąć lub obejść?

EDIT2

:
W tej chwili szybka praca:
  • ustaw
    EnableClientScript = "false"
    dla wszystkich kontroli walidacji (wyłącz walidację klienta)
  • ustaw
    MaintainScrollPositionOnPostback = "true"
    w dyrektywie Page

Wciąż mam nadzieję na rozwiązanie dla klienta ...

EDIT3

:
Wydaje się, że lepiej obejść ten problem, po prostu nadpisując funkcję
window.scrollTo ()
, aby nic nie robiła, gdy jest wywoływana przez skrypt walidacyjny:
<script type="text/javascript">
window.scrollTo = function() { }
</script>

Dodanie powyższego w dowolnym miejscu na stronie pozostawia zaznaczenie klienta, ale wyłącza metodę
window.scrollTo ()
na całej stronie
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Istnieją dwa możliwe sposoby:
Wyłącz weryfikację klienta i przejdź do właściwej pozycji z tyłu posta:
* set EnableClientScript="false" for all validation controls (disabling client validation)
* set MaintainScrollPositionOnPostback="true" in Page directive

Wyłącz funkcję scrollTo w javascript:
<script type="text/javascript">
window.scrollTo = function() { }
</script>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

to

znany błąd
http://connect.microsoft.com/V ... e-top
opisane w Microsoft Connect. Odpowiedni

pytanie
http://connect.microsoft.com/V ... e-top
ma ramy dla najlepszego obejścia:
var ValidationSummaryOnSubmitOrig = ValidationSummaryOnSubmit;
var ValidationSummaryOnSubmit = function() {
var scrollToOrig = window.scrollTo;
window.scrollTo = function() { };
var retVal = ValidationSummaryOnSubmitOrig();
window.scrollTo = scrollToOrig;
return retVal;
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zamiast
<script type="text/javascript">
window.scrollTo = function() { return true; }
</script>

aby bezkrytycznie zastąpić funkcję ScrollTo dla wszystkich ogłoszeń zwrotnych, umieściłem tę funkcję w zdarzeniu OnClientClick mojego przycisku. Jak pokazano niżej.
onClientClick="window.scrollTo = function(x,y) { return true; };"

Nie jestem pewien, czy to najlepsze rozwiązanie, ale wygląda na to, że wykonało pracę za mnie.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jak stwierdzono w

kliknij odpowiedź
/a/4962195, to jest

znany błąd
https://connect.microsoft.com/ ... e-top
mając obejścia.
Tutaj

bdukes one
https://coderoad.ru/699171/
który wydaje mi się najlepszy z obecnie dostępnych.
(function () {
var originalValidationSummaryOnSubmit = window.ValidationSummaryOnSubmit;
window.ValidationSummaryOnSubmit = function (validationGroup) {
var originalScrollTo = window.scrollTo;
window.scrollTo = function() { };
originalValidationSummaryOnSubmit(validationGroup);
window.scrollTo = originalScrollTo;
}
}());

(Nie opublikował tego bezpośrednio tutaj w SO, a teraz

problem z połączeniem
https://connect.microsoft.com/ ... e-top
wydaje się, że wymaga rejestracji, aby być widocznym, co utrudnia dostęp do obejścia).
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Używam tego: (wymagane są jquery i jquery.scrollTo)
Najpierw zakotwiczasz się z określoną klasą nad CV walidacji, na przykład:
<a class="custom_valsum_anchor"/>
<asp:ValidationSummary ID="valSum" runat="server" EnableClientScript="true"/>

następnie dołącz ten fragment javascript:
<pre class="lang-js prettyprint-override">
$(document).ready( function () {
var $valSum = $(".custom_valsum_anchor");
if ($valSum.size() > 0) {
var backup_ValidationSummaryOnSubmit = ValidationSummaryOnSubmit;
ValidationSummaryOnSubmit = function (validationGroup) {
var backup_ScrollTo = window.scrollTo;
window.scrollTo = function () { };
backup_ValidationSummaryOnSubmit(validationGroup);
window.scrollTo = backup_ScrollTo;
setTimeout(function () { $("body").scrollTo($valSum); }, 1);
};
}
});

Zasadniczo zastępuje funkcję
ValidationSummaryOnSubmit
wersją, która tymczasowo wyłącza
window.scrollTo
i w razie potrzeby przewija do zakotwiczenia. Nie powinno być trudno go zmienić, aby nie używał jquery.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Mam problem z działaniem
MaintainScrollPositionOnPostback = true

ale spowoduje przerwanie pozycji przewijania walidacji po stronie klienta. Dodałem więc skrypt, aby wyświetlić kontrolę podsumowania walidacji podczas ogłaszania zwrotnego.
private void FocusControlOnPageLoad(Control ctrl)
{ this.Page.ClientScript.RegisterClientScriptBlock( typeof(System.Web.UI.Page), "ctrlFocus",
@"<script>
function ScrollView()
{
var el = document.getElementById('" + ctrl.ClientID + @"')
if (el != null)
{
el.scrollIntoView();
el.focus();
}
}
window.onload = ScrollView;
</script>");
}

od:
protected void Page_PreRender(object sender, EventArgs e)
{
if (Page.IsValid == false)
{
FocusControlOnPageLoad(TheValidationSummary);
}
}

Wygląda na to, że powinienem również wyłączyć funkcję scrollTo:
window.scrollTo = function() {
return true;
}

Mam kod (głównie)

stąd
http://www.codeproject.com/KB/ ... .aspx
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Strona przejdzie do miejsca, w którym znajduje się Twoje wznowienie weryfikacji. Jeśli chcesz, aby pozostało na dole, przesuń podsumowanie kasy w dół obok przycisku Prześlij.
EDYTUJ, możesz też spróbować wyłączyć podsumowanie czeku.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Być może mógłbyś dziedziczyć z wymaganego walidatora pola i zastąpić walidację po stronie klienta w kontrolce niestandardowej?
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spójrz na konfigurację docelowego schematu dla swojego HTML.
Spróbuj

http://msdn.microsoft.com/en-us/library/6379d90d(VS.71).aspx
http://msdn.microsoft.com/en-us/library/6379d90d(VS.71).aspx
Przed VS 2005 można było ustawiać schemat strona po stronie.
Tylko myśl.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się