Як дозволити лише цифри в текстовому полі в бритві mvc4


83

У мене є 3 текстові поля, які приймають значення поштовий індекс та номер мобільного телефону та номер проживання. Я отримав рішення для дозволу лише числа в текстовому полі за допомогою jquery з Bellow post.

Я хотів би зробити так, щоб текстове поле EditFor приймало лише номери

але чи можемо ми зробити це за допомогою анотацій даних, оскільки я використовую бритву MVC4?


1
ви не можете цього зробити, оскільки анотації даних викликаються під час надсилання форми, а не при введенні даних у текстові поля
Картік Чінтала

хоча це правда, ви можете використовувати правила перевірки типів введення HTML5 (де підтримується браузером). працює за цим сценарієм питання.
hubson bropa

Використовуйте jQuery з класом css


@KarthikChintala Це неправильно. Анотації даних також використовуються при отриманні форми для визначення перевірок jQuery на стороні клієнта та типів введення для різних полів.
ProfK

Відповіді:


102

я просто бавився з введенням HTML5 type = number. Хоча його підтримують не всі браузери, я сподіваюся, що це шлях, який надалі буде обробляти певні типи обробки (номер для ex). досить просто зробити з бритвою (наприклад, VB)

@Html.TextBoxFor(Function(model) model.Port, New With {.type = "number"})

і завдяки Лі Річардсону, c # шлях

@Html.TextBoxFor(i => i.Port, new { @type = "number" }) 

виходячи за рамки питання, але ви можете зробити такий самий підхід для будь-якого типу введення html5


9
aka @ Html.TextBoxFor (i => i.Port, новий {@type = "number"})
Лі Річардсон,

2
Ви також можете ввести символи "-" та "+", які не є цифрами.
Містер Блондин,

Це принаймні частково підтримується у всіх основних браузерах, крім Opera Mini.
Тобіас Дж.

Окрім символів "-" та "+" ви можете ввести символ "e". Я використав анотацію даних + регулярний вираз, як зазначив Донал Лафферті у своїй відповіді.
Алехандро Зулета

60

Використовуйте регулярний вираз, напр

[RegularExpression("([1-9][0-9]*)", ErrorMessage = "Count must be a natural number")]
public int Count { get; set; }

2
Це має бути відповіддю.

52
@Html.TextBoxFor(m => m.PositiveNumber, 
                      new { @type = "number", @class = "span4", @min = "0" })

у MVC 5 за допомогою Razor ви можете додати будь-який атрибут html в анонімний об'єкт, як описано вище, щоб дозволити введення лише позитивних чисел у поле введення.


Досить акуратне рішення для перевірки інтерфейсу. Спасибі, щоб заощадити мій час @realaValoro :-)
Асіф Мехмуд

Звідки походить клас span4?
mischka

це лише зразок того, як вказати будь-який клас css для текстового поля.
diegosasw

15

у текстовому полі напишіть цей код, 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>

подія javascript не визначена firefox

Це не працює на багатьох смартфонах, оскільки подія натискання клавіш доступна не на всіх мобільних телефонах.
Репо

на нього відповіли для MVC4 razr
Shwet

9

Будь ласка, використовуйте атрибут 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; }

8

Це спрацювало для мене:

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

Це не працює на багатьох смартфонах, оскільки подія натискання клавіш доступна не на всіх мобільних телефонах.
Репо

5

Використовуйте цю функцію у своєму сценарії та поставте пробіл біля текстового поля, щоб показати повідомлення про помилку

$(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>

проголосував за просте рішення. Я не знаю, чому вони не позначили його як відповідь, що працює як шарм
ImranNaqvi

Це не працює на багатьох смартфонах, оскільки подія натискання клавіш доступна не на всіх мобільних телефонах.
Репо


2

Ось 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>

Сподіваюся, це допоможе вам.


Не всі шляхи коду повертають значення, і це не працює для мене

Це не працює на багатьох смартфонах, оскільки подія натискання клавіш доступна не на всіх мобільних телефонах.
Репо

2

для десяткових значень більше нуля HTML5 працює наступним чином:

<input id="txtMyDecimal" min="0" step="any" type="number">

І як це зробити за допомогою HTMLhelper у бритві?
LarryBud

Я намагався використовувати Razor, але, шукаючи віки, я не міг знайти такого чистого рішення.
Chris J

1

Можливо, ви можете використовувати анотацію даних [Integer] (якщо ви використовуєте DataAnnotationsExtensions http://dataannotationsextensions.org/ ). Однак це лише перевіряє, чи є значення цілим числом, але якщо воно заповнене (Отже, вам може знадобитися атрибут [Обов’язковий]).

Якщо ви ввімкнете ненав’язливу перевірку, вона перевірить її на стороні клієнта, але ви також повинні використовувати Modelstate.Valid у своїй дії POST, щоб відхилити її на випадок, якщо у людей вимкнено Javascript.


0

DataTypeмає другий конструктор, який приймає рядок. Однак внутрішньо це насправді те саме, що використання UIHintатрибута.

Додавання нового основного DataType неможливо, оскільки DataTypeперерахування є частиною .NET framework. Найближче, що ви можете зробити, це створити новий клас, який успадковується від DataTypeAttribute. Потім ви можете додати новий конструктор із власним DataTypeпереліченням.

public NewDataTypeAttribute(DataType dataType) : base(dataType)
 { }

public NewDataTypeAttribute(NewDataType newDataType) : base (newDataType.ToString();

Ви також можете перейти за цим посиланням. Але я порекомендую вам використовувати Jquery для того ж самого.


0

Привіт спробуйте наступне ....

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

Це не працює на багатьох смартфонах, оскільки подія натискання клавіш доступна не на всіх мобільних телефонах.
Репо

0
@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>
}


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

2
як щодо невеликого опису вашого рішення?
Джек Фламп

Зазвичай краще пояснити рішення, а не просто публікувати кілька рядків анонімного коду. Ви можете прочитати Як написати хорошу відповідь , а також Пояснити повністю кодовані відповіді
Anh Pham,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.