Deutsch

HTML 5 - оно

1275  1 2 все
alex445 коренной житель23.10.23 16:46
23.10.23 16:46 
Последний раз изменено 23.10.23 16:47 (alex445)

Скажите, почему, чтобы эта хрень работала, нужно обязательно вставлять костыли?


С привязками по-Блейзоровски, но суть и так ясна. Вот так не работает - можно вводить вручную любые значения меньше мин и больше макс.


<input type="number" min="@Min" max="@Max" @bind-Value />


Чтобы работало, нужно обязательно вставить джаваскрипт-костыль


<input type="number" min="@Min" max="@Max" @bind-Value onkeyup="if(value<min) value=min; if(value>max) value=max;" />


Нахрена делать атрибуты, которые не работают, а потом костылями их исправлять?

#1 
alex445 коренной житель23.10.23 17:12
NEW 23.10.23 17:12 
в ответ alex445 23.10.23 16:46, Последний раз изменено 23.10.23 17:16 (alex445)

Попробовал то же самое с Блейзором с привязками к модели - херня тормозящая, которая перерисовывает значение на правильное через раз.


<input type="number" min="@Min" max="@Max" @bind-Value @onkeyup="(_=>{if(Value<Min) Value=Min; if(Value>Max) Value=Max;})" />


Или можно отдельно метод выделить


<input type="number" min="@Min" max="@Max" @bind-Value @onkeyup="Validate" />

void Validate(KeyboardEventArgs a)

{

if (Value < Min) Value = Min;

if (Value > Max) Value = Max;

}


Джаваскрипт же срабатывает мгновенно. Хоть где-то он лучше.

#2 
Срыв покровов патриот23.10.23 18:26
NEW 23.10.23 18:26 
в ответ alex445 23.10.23 17:12

в Razor это делается в модели

[Range(1, 100000, ErrorMessage = "Accommodation invalid (1-100000).")] public int MaximumAccommodation { get; set; }


#3 
AlexNek патриот23.10.23 19:13
AlexNek
NEW 23.10.23 19:13 
в ответ alex445 23.10.23 17:12

https://blazorise.com/docs/components/numeric-picker

валидация после ухода фокуса

#4 
alex445 коренной житель23.10.23 20:39
NEW 23.10.23 20:39 
в ответ Срыв покровов 23.10.23 18:26

в Razor это делается в модели

[Range(1, 100000, ErrorMessage = "Accommodation invalid (1-100000).")] public int MaximumAccommodation { get; set; }

Тут не валидация важна, а чтобы юзер не мог ввести неправильные данные.


А так у нас для модели свой фреймворк, и с меня требуют, чтобы я его использовал. Его весьма нетривиально натянуть на подходы в Разоре и Блейзоре, хотя я пытаюсь. Не хотят они по-нормальнму писать.

#5 
alex445 коренной житель23.10.23 20:44
NEW 23.10.23 20:44 
в ответ AlexNek 23.10.23 19:13, Последний раз изменено 23.10.23 20:52 (alex445)
https://blazorise.com/docs/components/numeric-picker
валидация после ухода фокуса

Да понятно, что можно заюзать разные готовые компоненты. Наверное, так и сделаю, а то за...ся уже с этим голым ХТМЛ и джаваскрипт - это же не для людей сделно. Хотел заюзать по максимуму Бутстрэп и поменьше компонентов из сторонних фреймворков. Но похоже, это хреновый путь боли и велосипедов. Я вот Радзен использую - там это тоже есть.


Но вопрос-то про ХТМЛ 5 - почему атрибуты есть, но они не работают, и надо всё дописывать скриптами? Если это такой подход - типа, мы дали вам некие "якоря" - атрибуты, к которым можно привязаться, считать у них значения. А всё остальное реализуйте сами. Но в том-то и дело, что и такого принципа тоже нет. Часть атрибутов работает, а часть нет. Например, type=numeric на теге input ограничивает ввод, не позволяет ввести нечисловые вещи. А другие атрибуты - не ограничивают то, что по их названию вроде как должны. Т.е. всё работает неоднозначно, непонятно как, и надо читать тонны документации, чтобы понять. А сверху это ещё присыпано "у разных браузеров может быть разное поведение". И если какой-нибудь Эппл скажет, что в их браузерах они решили всё делать через дупу, то все должны сменить ориентацию.

#6 
alex445 коренной житель23.10.23 20:57
NEW 23.10.23 20:57 
в ответ alex445 23.10.23 16:46
onkeyup="if(value<min) value=min; if(value>max) value=max;"

Этот подход тоже хреновенький - не даёт ввести первую фифру, меньшую min, если min это одна цифра. Т.е. допустим мин это 3, макс 50, хочешь ввести 15, последовательно нажимая кнопки - не получается. Только если сразу всё число из буфера обмена скопировать. Но в Блейзоре, если используешь байндинг, то событие changed уже занято.


Не, я у себя это в модели валидирую, но хотел как можно проще. А проще нельзя - хотят, чтобы было сложно... Наверное, плюну и заюзаю контрол из готового фреймворка.

#7 
AlexNek патриот23.10.23 20:57
AlexNek
NEW 23.10.23 20:57 
в ответ alex445 23.10.23 17:12
Блейзором с привязками к модели - херня тормозящая

танцору всегда что то мешает бебе и извращения обычно вредны...


  • Валидация полей ввода происходит обычно после потери фокуса поля ввода.
  • Установка Value происходит после каких либо событий которые можно перехватить.


Можно запретить использование пустого поля и ввода букв

<input type="number" inputmode="numeric" pattern="\d*" min="@Min" max="@Max" @bind-value="Value" required />


Вот с Bootstrap валидацией. Для чего-то большего нужно и писать побольше либо пользовать готовые компоненты

<EditForm Model="@exampleModel">
    <InputNumber TValue="int?" EnableMinMax="true" Min="@Min" Max="@Max" Value="@exampleModel.NumberProperty" ValueExpression="@( () => exampleModel.NumberProperty )"></InputNumber>
<EditForm>
@code{
  private ExampleModel exampleModel = new ExampleModel();
  class ExampleModel
  {
    public int? NumberProperty { get; set; }
  }
}
</EditForm>
#8 
alex445 коренной житель23.10.23 20:59
NEW 23.10.23 20:59 
в ответ AlexNek 23.10.23 20:57

Можно запретить использование пустого поля и ввода букв

<input type="number" inputmode="numeric" pattern="\d*" min="@Min" max="@Max" @bind-value="Value" required />

numeric уже достаточно, чтобы запретить ввод букв. Зачем паттерн ещё?

#9 
alex445 коренной житель23.10.23 21:33
NEW 23.10.23 21:33 
в ответ Срыв покровов 23.10.23 18:26

в Razor это делается в модели

[Range(1, 100000, ErrorMessage = "Accommodation invalid (1-100000).")] public int MaximumAccommodation { get; set; }

Во, вспомнил, как это называется. Это у вас серверная валидация. Она у меня тоже есть, только там самописное, без этих атрибутов. А я ещё хочу вместо клиенсткой валидации просто запретить юзеру вводить неправильные значения.


Кстати, а как вы привяжете проперти из Range (мин и макс) к пропертям контрола, в котором вводится значение? Я в своё время тоже радовался - классная же валидация. А когда захотел привязаться, так надо было из модели в модель представления эти атрибуты вытаскивать. И пошла возьба с рефлексией и вставка этих атрибутов в виде обычных свойств в модели представления.


Если ваши контролы могут вытаскивать атрибуты и привязываться к их свойствам, то ок. Но в основном они не могут. Это для ASP.NET MVC Майкрософт написала UI фреймворк, который из атрибутов вытаскивал значения. Но это серверный фреймворк и серверная валидация, а не привязка на клиенте. Натравите на это верху какой-нибудь KnockoutJS, Ангуляр или что вы на клиенте используете, и попробуйте в нём вытащить значения атрибутов из модели.

#10 
Срыв покровов патриот23.10.23 21:54
NEW 23.10.23 21:54 
в ответ alex445 23.10.23 21:33
Это у вас серверная валидация.

емнип, asp.net переносит эти значения на клиент и валидирует без дерганья функций контроллера.

#11 
AlexNek патриот23.10.23 22:09
AlexNek
NEW 23.10.23 22:09 
в ответ alex445 23.10.23 20:44
почему атрибуты есть, но они не работают

работают "в ограниченном пространстве" хммм

Работает только для 1го неправильного ввода. Код видимо стыбрили, так как у 3х броусеров именно так неправильно работает


Хотел заюзать по максимуму Бутстрэп

там же концепт валидация после ввода

#12 
AlexNek патриот23.10.23 22:10
AlexNek
NEW 23.10.23 22:10 
в ответ alex445 23.10.23 20:59
Зачем паттерн ещё?
- + разрешить можно, допустим. Но можно и убрать
#13 
alex445 коренной житель23.10.23 22:11
NEW 23.10.23 22:11 
в ответ Срыв покровов 23.10.23 21:54

Я и говорю, что там свой фреймворк для этого написан. Все эти Html.ValueFor или как их там - расширения всякие. Там под ними куча HTML разметки с джаваскриптом. А захотите вы поменять клиентский фреймворк. Точнее, заюзать, наконец, сторонний, а не использовать эти расширения. Как будете тягать в него валидирующие значения из атрибутов модели?

#14 
alex445 коренной житель23.10.23 22:25
NEW 23.10.23 22:25 
в ответ AlexNek 23.10.23 19:13

https://blazorise.com/docs/components/numeric-picker

валидация после ухода фокуса

Почемую юзаю Бутстрэп в дополнение к подобным фреймворкам - потому что во всех этих фреймворках, что смотрел, нет нормальных контейнеров для контролов. Аналогов стек панелей, гридов (не дата гридов), панелей с прилипаниями и прочего - как в WPF или MAUI. Сам в дивы пихай как-нибудь, епись с замудрённой ХТМЛной флексбоксиной. Т.е. контролов мы тебе во фреймворк напихали, а с основными лейаутами разбирайся сам. А в Бутстрэп что-то подобное завезли. Корявенькое и со своими замутками, но завезли.

#15 
AlexNek патриот23.10.23 22:44
AlexNek
NEW 23.10.23 22:44 
в ответ alex445 23.10.23 22:25

Docking Layout всегда был проблемой но найти можно

https://www.htmlelements.com/blazor/blazor-ui/demos/blazor...

#17 
Срыв покровов патриот23.10.23 23:55
NEW 23.10.23 23:55 
в ответ alex445 23.10.23 22:11
А захотите вы поменять клиентский фреймворк. Точнее, заюзать, наконец, сторонний, а не использовать эти расширения. Как будете тягать в него валидирующие значения из атрибутов модели?

это в моей ситуации как если бы производители автомобилей предусматривали бы возможность передвигаться по луне.

#18 
alex445 коренной житель24.10.23 00:08
NEW 24.10.23 00:08 
в ответ Срыв покровов 23.10.23 23:55
А захотите вы поменять клиентский фреймворк. Точнее, заюзать, наконец, сторонний, а не использовать эти расширения. Как будете тягать в него валидирующие значения из атрибутов модели?

это в моей ситуации как если бы производители автомобилей предусматривали бы возможность передвигаться по луне.

Остаётся только порадоваться за вас, что у вас из всех требований к автомобилям - чёрный цвет. ))

#19 
alex445 коренной житель24.10.23 00:26
NEW 24.10.23 00:26 
в ответ AlexNek 23.10.23 22:42

как это нету? А енто шо?

https://blazorise.com/docs/components/layout

https://blazorise.com/docs/helpers/utilities/grid

https://demos.telerik.com/blazor-ui/tilelayout/overview

https://demos.telerik.com/blazor-ui/form/layout

https://docs.devexpress.com/Blazor/404362/components/layou...

Первый это копия Бутстрэпа по функциональности. Второй и третий - ок. Но когда это появилось? Год-два назад это всё было доступно?


Вот у МС с WPF и MAUI всё сразу идёт из коробки и бесплатно. По крайней мере уж базовые-то вещи. И вот такого нет, что половина атрибутов либо работает, либо не стандартизирована и отличается от браузера к браузеру.

#20 
1 2 все