ASP.NET: Прокрутите к управлению

Используя ваш стиль кода, вы должны использовать что-то вроде этого:

var dates: [Double] = [1542412800000,
                       1542499200000,
                       1543017600000,
                       1543708800000,
                       1544659200000,
                       1547164800000,
                       1550880000000]

let intermediate: [Double] = dates
    .map{[110] - dates.first!}
    let percentages = intermediate
    .map{[110]/intermediate.last!}
percentages.forEach{ it in
    print(it)
}

Реальная проблема в том, что вы делите каждый элемент на «начальное» максимальное значение (не сдвигается на минимальное значение).

9
задан Rex M 14 April 2009 в 23:14
поделиться

7 ответов

Are you using a Validation Summary on your page?

If so, ASP.NET renders some javascript to automatically scroll to the top of the page which may well override the automatic behaviour of the client side validation to focus the last invalid control.

Also, have you turned client side validation off?

If you take a look at the javascript generated by the client side validation you should see methods like this:

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);
}

Note the call to ValidatorSetFocus, which is a rather long method that attempts to set the focus to the control in question, or if you have multiple errors, to the last control that was validated, using (eventually) the following lines:

if (typeof(ctrl.focus) != "undefined" && ctrl.focus != null) {
  ctrl.focus();
  Page_InvalidControlToBeFocused = ctrl;
}

To get this behaviour to work, you would ideally need to ensure that all your validators are set to be client-side - server side validators will obviously require a postback, and that might affect things (i.e. lose focus/position) - and setting MaintainScrollPositionOnPostBack to true would probably cause the page to reload to the submit button, rather than the invalid form element.

Using the server side .Focus method will cause ASP.NET to render out some javascript "on the page load" (i.e. near the bottom of the page) but this could be being overriden by one of the other mechanisms dicussed above.

5
ответ дан 4 December 2019 в 09:14
поделиться

Добавление MaintainScrollPositionOnPostback является самым близким из встроенных ASP.NET, но не обязательно будет переходить в недопустимые поля.

<%@ Page MaintainScrollPositionOnPostback="true" %>
2
ответ дан 4 December 2019 в 09:14
поделиться

Вы уверены, что Focus () выиграл не делаете то, что вы описываете? Под капотом он, по сути, делает «обходной путь JavaScript» - он записывает JS на страницу, которая вызывает focus () для элемента управления с совпадающим идентификатором:

Какой бы элемент управления не вызывал Focus () последним до завершения обработки страницы записывает это на страницу:

<script type="text/javascript">
//<![CDATA[
WebForm_AutoFocus('txtFocus2');//]]>
</script>
1
ответ дан 4 December 2019 в 09:14
поделиться

SO I believe the problem is because I was trying to focus on HtmlGenericControls instead of WebControls.

I just ended up doing a workaround based off of:

http://ryanfarley.com/blog/archive/2004/12/21/1325.aspx http://www.codeproject.com/KB/aspnet/ViewControl.aspx

...in the interest of time.

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));
}

Usage:

if (!this.PropertyForm.Validate())
{
    this.PropertyForm.ErrorMessage.ScrollTo();
    failed = true;
}

(Although it appears Page.RegisterClientScriptBlock() is deprecated for Page.ClientScript.RegisterClientScriptBlock()).

5
ответ дан 4 December 2019 в 09:14
поделиться

Вы должны изучить jQuery и плагин ScrollTo

http://demos.flesler.com/jquery/ scrollTo /

0
ответ дан 4 December 2019 в 09:14
поделиться

I've achieved something similar using basic HTML fragments. You just leave an element with a known ID:

<span id="CONTROL-ID"></span>

And then either via script, on on the server side change the url:

window.location += "#CONTROL-ID";

In the first case the page won't reload, it will just scroll down to the control.

0
ответ дан 4 December 2019 в 09:14
поделиться

Очень простое решение - установить свойство SetFocusOnError RequiredFieldValidator (или какого бы элемента управления валидатором вы ни использовали) в true

.
2
ответ дан 4 December 2019 в 09:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: