فرض مربع نص ASP.NET لعرض العملة مع علامة $

هل هناك طريقة للحصول على مربع نص ASP.NET لقبول قيم العملة فقط ، وعندما يتم التحقق من صحة عنصر التحكم ، أدخل علامة $ مسبقًا؟

أمثلة:

10.23 يصبح 10.23 دولار
1.45 دولارًا أمريكيًا للإقامة بسعر 1.45 دولارًا أمريكيًا 10.a يثير الخطأ بسبب عدم كونه رقمًا صالحًا

لدي RegularExpressionValidator الذي يتحقق من صحة الرقم ، ولكن لا أعرف كيفية فرض علامة $ في النص. أظن أن جافا سكريبت قد تعمل ، ولكن كان يتساءل عما إذا كان هناك طريقة أخرى للقيام بذلك.

3
انتهى بي الأمر إلى معرفة بعض جافا سكريبت للقيام بما أردت. لقد كانت هناك حاجة لتبسيط حزمة النشر ، وكانت مجموعة أدوات AJAX مجرد تبعية أخرى.
وأضاف المؤلف Jason Z, مصدر

5 إجابة

التحكم في ASP.NET MaskedEdit من AJAX Control Toolkit .

9
وأضاف
رابط MaskedEdit مكسور.
وأضاف المؤلف Neil Knight, مصدر
ما هو التصويت لأسفل؟
وأضاف المؤلف Neil Knight, مصدر
تضمين التغريدة ردًا علىNeilKnight - A downvote عن رابط مكسور ل 5 سنوات تقريبا؟ هذا قاس ، ألا تعتقد؟ تم إصلاح الروابط الآن ، ولكنك (شخص ما كان في المنتدى لأكثر من 3 سنوات) كان من الممكن أن يساعد في إصلاح الرابط المعطل.
وأضاف المؤلف Forgotten Semicolon, مصدر

أعلم أن الإجابة قد تم قبولها بالفعل ، ولكني أردت طرح حل آخر لأي شخص يعاني من نفس المشكلة والبحث عن حلول متعددة.

الطريقة التي أقوم بها هي استخدام jQuery المكون الإضافي لتنسيق العملة لربط إدخال المستخدم على جانب العميل. يتطلب تحليل هذا الإدخال على جانب الخادم فقط:

// directive
using System.Globalization;

// code
decimal input = -1;
if (decimal.TryParse(txtUserInput.Text, NumberStyles.Currency, 
    CultureInfo.InvariantCulture, out input))
{
    parameter = input.ToString();
}

السقوط الوحيد لهذا هو أنه يمكن للمستخدم إيقاف تشغيل JavaScript ، وفي هذه الحالة يعمل مدقق RegEx الذي يعمل على جانب الخادم كطرف خلفي. إذا كان عنصر التحكم هو databound ، كل ما عليك فعله هو decimalValue.ToString ("{0: c}") ، كما ذكر آخرون ، من أجل عرض تنسيق العملة الصحيح.

الشيء الرائع في هذا هو أنه إذا قام المستخدم بإدخال مربع النص ويعرض $ 0.00 على جانب العميل ، فإن عبارة if server-side إذا كانت خاطئة. إذا كانت القيمة العشرية غير فارغة في قاعدة البيانات ، فما عليك سوى تغيير الإدخال العشري = -1 إلى الإدخال العشري = 0 وستحصل على قيمة افتراضية تبلغ 0.

5
وأضاف
أكيد شيء! انها مفيدة للغاية.
وأضاف المؤلف Jim Schubert, مصدر

قد تكون طريقة أخرى للقيام بذلك بوضع علامة الدولار خارج يمين مربع النص. هل هناك حاجة حقيقية لوجود علامة الدولار داخل العلبة أو هل ستقوم بطاقة تعريفية بسيطة؟

4
وأضاف
لا توجد حاجة حقيقية لذلك ، أنا مرتبطة بشكل غير مريح بمتطلبات المبيعات والتسويق. حاولت الجدال ضده ، لكن تم نقضه.
وأضاف المؤلف Jason Z, مصدر
حل لطيف يفكر خارج الصندوق! لم استطع مقاومة ...
وأضاف المؤلف Brian Hinchey, مصدر
decimal sValue = decimal.Parse(txtboxValue.Text.Trim());
// Put Code to check whether the $ sign already exist or not.
//Try making a function returning boolean
//if Dollar sign not available do this
{ string LableText = string.Format("{0:c}", sValue); }
else
{ string LableText = Convert.ToString(sValue); }
2
وأضاف
string.Format ("{0: c}" ، sValue) هو حل لطيف عندما تحتاج إلى وضع القيمة في تسمية في بعض الأحيان و textbox في أوقات أخرى.
وأضاف المؤلف Tony L., مصدر

في .CS يمكن أن تفعل نمط تطابق على طول خطوط ،

string value = text_box_to_validate.Text;

string myPattern = @"^\$(\d{1,3},?(\d{3},?)*\d{3}(\.\d{0,2})|\d{1,3}(\.\d{2})|\.\d{2})$";
Regex r = new Regex(myPattern);
Match m = r.Match(value);

if (m.Success)
{
    //do something -- everything passed
}
else
{
    //did not match
    //could check if number is good, but is just missing $ in front
}
0
وأضاف
بالفعل تشغيل هذا regex. أريد إدراج علامة $ في قيمة مربع النص بعد إدخال القيمة ، ويفضل بدون إعادة النشر.
وأضاف المؤلف Jason Z, مصدر