Mvc4 रेजर में टेक्स्टबॉक्स में केवल संख्याओं की अनुमति कैसे दें


83

मेरे पास 3 टेक्स्ट बॉक्स हैं जो मान पोस्टल कोड और मोबाइल नंबर और आवासीय नंबर लेते हैं। मुझे Bellow पोस्ट से jquery का उपयोग करके टेक्स्ट बॉक्स में केवल संख्या की अनुमति देने का समाधान मिला।

मैं केवल एक EditFor टेक्स्टबॉक्स संख्याएँ स्वीकार करना चाहता हूँ

लेकिन क्या हम डेटा एनोटेशन का उपयोग करके ऐसा कर सकते हैं जैसा कि मैं MVC4 रेजर का उपयोग कर रहा हूं?


1
आप ऐसा नहीं कर सकते क्योंकि डेटा एनोटेशन कहा जाता है जब आप अपना फॉर्म सबमिट करते हैं, न कि जब आप अपने
टेक्स्टबॉक्स

जबकि यह सच है, आप HTML5 इनपुट प्रकार सत्यापन नियमों का उपयोग कर सकते हैं (जहां ब्राउज़र द्वारा समर्थित है)। इस प्रश्न परिदृश्य में काम करता है।
हबसन ब्रोपा

एक css वर्ग के साथ jQuery का उपयोग करें


@KarthikChintala यह गलत है। विभिन्न क्षेत्रों के लिए क्लाइंट साइड jQuery सत्यापन और इनपुट प्रकार निर्धारित करने के लिए, डेटा प्रदान करते समय डेटा एनोटेशन का भी उपयोग किया जाता है।
प्रोफेक

जवाबों:


102

मैं बस HTML5 इनपुट प्रकार = नंबर के साथ खेल रहा था। हालांकि इसके सभी ब्राउज़रों द्वारा समर्थित नहीं है, मुझे उम्मीद है कि यह विशिष्ट हैंडलिंग (पूर्व के लिए संख्या) को संभालने का तरीका है। रेजर के साथ करने के लिए बहुत आसान है (पूर्व VB है)

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

और ली रिचर्डसन के लिए धन्यवाद, सी # रास्ता

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

प्रश्न के दायरे से परे लेकिन आप किसी भी html5 इनपुट प्रकार के लिए यही दृष्टिकोण अपना सकते हैं


9
उर्फ @ Html.TextBoxFor (i => i.Port, new {@type = "number"})
ली रिचर्डसन

2
आप "-" और "+" इनपुट भी कर सकते हैं जो वर्ण हैं नंबर नहीं।
श्री ब्लॉन्ड

यह ओपेरा मिनी को छोड़कर सभी प्रमुख ब्राउज़रों में कम से कम आंशिक रूप से समर्थित है ।
तोबियों जे

"-" और "+" वर्णों के अलावा आप "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 में रेजर के साथ आप गुमनाम ऑब्जेक्ट में किसी भी html इनपुट विशेषता को उपरोक्त उदाहरण के अनुसार इनपुट क्षेत्र में केवल सकारात्मक संख्याओं को अनुमति देने के लिए जोड़ सकते हैं।


फ्रंट एंड वैलिडेशन के लिए बहुत साफ समाधान। मेरा समय बचाने के लिए धन्यवाद @realaValoro :-)
आसिफ महमूद

स्पैन 4-क्लास कहां से आता है?
शरारत

यह केवल एक नमूना है कि किसी टेक्स्ट बॉक्स के लिए किसी भी सीएसएस वर्ग को कैसे निर्दिष्ट किया जाए।
डाईगोससॉव

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>

जावास्क्रिप्ट घटना को फ़ायरफ़ॉक्स परिभाषित नहीं किया गया है

यह बहुत सारे स्मार्टफ़ोन पर काम नहीं करेगा क्योंकि सभी मोबाइल पर कीप इवेंट उपलब्ध नहीं है।
रेपो

यह MVC4 रेजर के लिए उत्तर दिया गया था
श्वेत

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>

सरल समाधान के लिए upvoted। मुझे नहीं पता कि उन्होंने इसे आकर्षण की तरह काम करने वाले उत्तर के रूप में चिह्नित क्यों नहीं किया
ImranNaqvi

यह बहुत सारे स्मार्टफ़ोन पर काम नहीं करेगा क्योंकि सभी मोबाइल पर कीप इवेंट उपलब्ध नहीं है।
रेपो


2

यहाँ जावास्क्रिप्ट है जो आपको केवल संख्या दर्ज करने की अनुमति देगा।

onkeypressटेक्स्टबॉक्स के लिए ईवेंट की सदस्यता लें ।

@Html.TextBoxFor(m=>m.Phone,new { @onkeypress="OnlyNumeric(this);"})

यहाँ इसके लिए जावास्क्रिप्ट है:

<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 के साथ यह कैसे करते हैं?
लैरी बड

मैंने रेजर का उपयोग करने का प्रयास किया, लेकिन उम्र की खोज के बाद, मुझे ऐसा समाधान नहीं मिला जो यह साफ था।
क्रिस जे।

1

हो सकता है कि आप [Integer] डेटा एनोटेशन (यदि आप DataAnnotationsExtensions http://dataannotationsextensions.org/ का उपयोग करते हैं ) का उपयोग कर सकते हैं । हालाँकि, यह wil केवल जाँचता है कि मान पूर्णांक है या नहीं, यदि यह भरा हुआ है (तो आपको [आवश्यक] विशेषता की भी आवश्यकता हो सकती है)।

यदि आप विनीत मान्यता को सक्षम करते हैं, तो यह क्लाइंटसाइड को मान्य करेगा, लेकिन आपको लोगों को जावास्क्रिप्ट अक्षम होने की स्थिति में इसे अस्वीकार करने के लिए अपने POST कार्रवाई में Modelstate.Valid का उपयोग करना चाहिए।


0

DataTypeएक दूसरा निर्माता है जो एक स्ट्रिंग लेता है। हालांकि, आंतरिक रूप से, यह वास्तव में UIHintविशेषता का उपयोग करने के समान है ।

नया कोर DataType जोड़ना संभव नहीं है क्योंकि DataTypeएन्यूमरेशन .NET फ्रेमवर्क का हिस्सा है। निकटतम चीज़ जो आप कर सकते हैं, वह एक नया वर्ग बनाना है जो इनहेरिट करता है 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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.