У меня есть 3 текстовых поля, которые принимают значения почтовый индекс, номер мобильного телефона и номер дома. Я получил решение, позволяющее разрешить только число в текстовом поле с помощью jquery из сообщения Bellow.
Я хотел бы, чтобы текстовое поле EditFor принимало только числа
но можем ли мы сделать это с помощью аннотаций данных, поскольку я использую бритву MVC4?
asp.net-mvc
asp.net-mvc-3
asp.net-mvc-4
Вайбхав шах
источник
источник
Ответы:
Я просто играл с HTML5 input type = number. хотя он не поддерживается всеми браузерами, я ожидаю, что это будет способ обработки обработки конкретного типа (например, номер). довольно просто сделать с бритвой (например, VB)
@Html.TextBoxFor(Function(model) model.Port, New With {.type = "number"})
и благодаря Ли Ричардсону, способ C #
@Html.TextBoxFor(i => i.Port, new { @type = "number" })
выходит за рамки вопроса, но вы можете сделать тот же подход для любого типа ввода html5
источник
Используйте регулярное выражение, например
[RegularExpression("([1-9][0-9]*)", ErrorMessage = "Count must be a natural number")] public int Count { get; set; }
источник
@Html.TextBoxFor(m => m.PositiveNumber, new { @type = "number", @class = "span4", @min = "0" })
в MVC 5 с Razor вы можете добавить любой атрибут ввода html в анонимный объект, как в приведенном выше примере, чтобы разрешить только положительные числа в поле ввода.
источник
в текстовом поле напишите этот код,
onkeypress="return isNumberKey(event)"
и функция для этого будет чуть ниже.<script type="text/javascript"> function isNumberKey(evt) { var charCode = (evt.which) ? evt.which : event.keyCode; if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) return false; return true; } </script>
источник
Используйте атрибут DataType, но при этом будут исключены отрицательные значения, поэтому приведенное ниже регулярное выражение позволит избежать этого.
[DataType(DataType.PhoneNumber,ErrorMessage="Not a number")] [Display(Name = "Oxygen")] [RegularExpression( @"^\d+$")] [Required(ErrorMessage="{0} is required")] [Range(0,30,ErrorMessage="Please use values between 0 to 30")] public int Oxygen { get; set; }
источник
Это сработало для меня:
<input type="text" class="numericOnly" placeholder="Search" id="txtSearch">
Javacript:
//Allow users to enter numbers only $(".numericOnly").bind('keypress', function (e) { if (e.keyCode == '9' || e.keyCode == '16') { return; } var code; if (e.keyCode) code = e.keyCode; else if (e.which) code = e.which; if (e.which == 46) return false; if (code == 8 || code == 46) return true; if (code < 48 || code > 57) return false; }); //Disable paste $(".numericOnly").bind("paste", function (e) { e.preventDefault(); }); $(".numericOnly").bind('mouseenter', function (e) { var val = $(this).val(); if (val != '0') { val = val.replace(/[^0-9]+/g, "") $(this).val(val); } });
источник
Используйте эту функцию в своем скрипте и поместите диапазон рядом с текстовым полем, чтобы отобразить сообщение об ошибке
$(document).ready(function () { $(".digit").keypress(function (e) { if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) { $("#errormsg").html("Digits Only").show().fadeOut("slow"); return false; } }); }); @Html.TextBoxFor(x => x.company.ContactNumber, new { @class = "digit" }) <span id="errormsg"></span>
источник
can we do this using data annotations as I am using MVC4 razor ?
Нет, насколько я понимаю ваш вопрос, ненавязчивая проверка покажет только ошибки. Самый простой способ - использовать плагин jquery:
Плагин маскированного ввода
источник
Вот javascript, который позволяет вводить только числа.
Подпишитесь на
onkeypress
событие для текстового поля.@Html.TextBoxFor(m=>m.Phone,new { @onkeypress="OnlyNumeric(this);"})
Вот javascript для этого:
<script type="text/javascript"> function OnlyNumeric(e) { if ((e.which < 48 || e.which > 57)) { if (e.which == 8 || e.which == 46 || e.which == 0) { return true; } else { return false; } } } </script>
Надеюсь, это поможет тебе.
источник
для десятичных значений больше нуля HTML5 работает следующим образом:
<input id="txtMyDecimal" min="0" step="any" type="number">
источник
Возможно, вы можете использовать аннотацию данных [Integer] (если вы используете DataAnnotationsExtensions http://dataannotationsextensions.org/ ). Однако это будет проверять только, является ли значение целым числом, а не заполнено (так что вам также может понадобиться атрибут [Required]).
Если вы включите ненавязчивую проверку, она будет проверяться на стороне клиента, но вы также должны использовать Modelstate.Valid в своем действии POST, чтобы отклонить его, если у людей отключен Javascript.
источник
DataType
имеет второй конструктор, который принимает строку. Однако внутри это фактически то же самое, что и использованиеUIHint
атрибута.Добавление нового основного типа DataType невозможно, поскольку
DataType
перечисление является частью платформы .NET. Самое близкое, что вы можете сделать, - это создать новый класс, унаследованный от классаDataTypeAttribute
. Затем вы можете добавить новый конструктор со своим собственнымDataType
перечислением.public NewDataTypeAttribute(DataType dataType) : base(dataType) { } public NewDataTypeAttribute(NewDataType newDataType) : base (newDataType.ToString();
Вы также можете перейти по этой ссылке. Но я рекомендую вам использовать JQuery для того же.
источник
Привет, попробуйте следующее ....
<div class="editor-field"> <%: Html.TextBoxFor(m => m.UserName, new {onkeydown="return ValidateNumber(event);" })%> <%: Html.ValidationMessageFor(m => m.UserName) %> </div>
СЦЕНАРИЙ
<script type="text/javascript"> function ValidateNumber(e) { var evt = (e) ? e : window.event; var charCode = (evt.keyCode) ? evt.keyCode : evt.which; if (charCode > 31 && (charCode < 48 || charCode > 57)) { return false; } return true; };
источник
@Html.TextBoxFor(x => x.MobileNo, new { @class = "digit" , @maxlength = "10"}) @section Scripts { @Scripts.Render("~/bundles/jqueryui") @Styles.Render("~/Content/cssjqryUi") <script type="text/javascript"> $(".digit").keypress(function (e) { if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) { $("#errormsg").html("Digits Only").show().fadeOut("slow"); return false; } }); </script> }
источник
<input type = "number" @ bind = "Quantity" class = "txt2" />
Используйте type = "number"
источник
function NumValidate(e) { var evt = (e) ? e : window.event; var charCode = (evt.keyCode) ? evt.keyCode : evt.which; if (charCode > 31 && (charCode < 48 || charCode > 57)) { alert('Only Number '); return false; } return true; } function NumValidateWithDecimal(e) { var evt = (e) ? e : window.event; var charCode = (evt.keyCode) ? evt.keyCode : evt.which; if (!(charCode == 8 || charCode == 46 || charCode == 110 || charCode == 13 || charCode == 9) && (charCode < 48 || charCode > 57)) { alert('Only Number With desimal e.g.: 0.0'); return false; } else { return true; } } function onlyAlphabets(e) { try { if (window.event) { var charCode = window.event.keyCode; } else if (e) { var charCode = e.which; } else { return true; } if ((charCode > 64 && charCode < 91) || (charCode > 96 && charCode < 123) || (charCode == 46) || (charCode == 32)) return true; else alert("Only text And White Space And . Allow"); return false; } catch (err) { alert(err.Description); }} function checkAlphaNumeric(e) { if (window.event) { var charCode = window.event.keyCode; } else if (e) { var charCode = e.which; } else { return true; } if ((charCode >= 48 && charCode <= 57) || (charCode >= 65 && charCode <= 90) || (charCode == 32) || (charCode >= 97 && charCode <= 122)) { return true; } else { alert('Only Text And Number'); return false; }}
источник