#asp.net-core #.net-core #razor-pages
#asp.net-core #.net-core #страницы razor
Вопрос:
Я пытаюсь предоставить удобный для пользователя ввод (в процентах) для десятичной дроби и иметь возможность проверки. Я застрял, потому что asp-validation-for не будет отображаться, если соответствующий ввод скрыт.
Текущий метод заключается в использовании autonumeric.js для форматирования на стороне клиента в поле только для отображения, которое копируется в поле для сохранения в базе данных.
Как я могу получить сообщение о проверке для отображения?
LoanEstimate.cs
[NotMapped]
public string RateDisplayOnly { get; set; }
[Range(0,1,ErrorMessage="Rate must be between 0.000% and 100.00%")]
[DisplayFormat(DataFormatString = "{0:p}")]
[Required]
public decimal? Rate { get; set; }
Create.cshtml
<div class="form-group">
<label asp-for="LoanEstimate.Rate" class="control-label"></label>
<input asp-for="LoanEstimate.RateDisplayOnly" class="form-control autonumeric-display-only autonumeric-percent" />
<input asp-for="LoanEstimate.Rate" class="form-control" type="hidden"/>
<span asp-validation-for="LoanEstimate.Rate" class="text-danger"></span>
</div>
Javascript
$(document).ready(function ($) {
//autonumeric.js field formatting
const anElement = AutoNumeric.multiple('.autonumeric-currency', {
currencySymbol: "$"
});
const anElement2 = AutoNumeric.multiple('.autonumeric-percent', {
decimalPlaces: 3,
rawValueDivisor: 100,
suffixText: "%"
}
)
$(".autonumeric-display-only").on('keyup', function () {
var str = this.id
var getThis = str.substring(0, str.indexOf("DisplayOnly"))
$("#" getThis).val(AutoNumeric.getNumericString("#" this.id));
});
});
Проблема
Сообщение о проверке не отображается при вводе для LoanEstimate.Скорость скрыта
Ответ №1:
Используйте $.validator.setDefaults
, вот демонстрация:
Вид:
<form method="post">
<div class="form-group">
<label asp-for="Rate" class="control-label"></label>
<input asp-for="RateDisplayOnly" class="form-control autonumeric-display-only autonumeric-percent" onblur="validateRate()"/>
<input asp-for="Rate" class="form-control" hidden />
<span asp-validation-for="Rate" class="text-danger"></span>
</div>
<input type="submit" value="submit" />
</form>
js:
function validateRate() {
$("#Rate").valid();
}
$.validator.setDefaults({
ignore: [],
// other default options
});
$(document).ready(function ($) {
//autonumeric.js field formatting
const anElement = AutoNumeric.multiple('.autonumeric-currency', {
currencySymbol: "$"
});
const anElement2 = AutoNumeric.multiple('.autonumeric-percent', {
decimalPlaces: 3,
rawValueDivisor: 100,
suffixText: "%"
}
)
$(".autonumeric-display-only").on('keyup', function () {
var str = this.id
var getThis = str.substring(0, str.indexOf("DisplayOnly"))
$("#" getThis).val(AutoNumeric.getNumericString("#" this.id));
});
});
Комментарии:
1. Спасибо! Сообщение действительно запускается при нажатии кнопки отправки. Я замечаю, что, когда поле ввода не скрыто, сообщение о проверке срабатывает, когда я выхожу из поля <input asp-for=»Rate» class=»form-control» /> , однако с помощью этого метода оно срабатывает только при нажатии кнопки отправки. Есть ли способ заставить его срабатывать, когда я выбираю вкладку из <input asp-for=»RateDisplayOnly» class=»form-control autonumeric-display-only autonumeric-percent» />?
2. Я обновил свой ответ, добавил функцию onblur
<input asp-for="RateDisplayOnly"/>
, когда элемент потерял фокус, подтвердите $ («#Rate»).3. Потрясающе! Ваше предложение в приведенном выше комментарии работает, обратите внимание: пример кода, который у вас есть в вашем ответе, этого не делает. Пожалуйста, замените на что-то вроде $(«.autonumeric-display-only»).blur(function () { var str = this.id var getThis = str.substring(0, str.indexOf(«DisplayOnly»)) $(«#» getThis). valid(); }); (я полагаю, внутри готового документа), и я отмечу как ответ. Спасибо за вашу помощь!
4. Ах, но ваш пример работает с вашим кодом, так что все в порядке, отмечаю как ответ, спасибо!