سؤال

لذلك أنا أبحث في كتابة بعض ملحقات MVC المخصصة والأول أول ما أحاول معالجته هو صندوق تنسيق للتعامل مع أشياء مثل العملة والتواريخ والأوقات. لديّ عرض يعمل بشكل مثالي ، وتنسيقه ، والعمل مع أنواع قوية وكل شيء ذهبي. ومع ذلك ، فإن المشكلة التي أديرها الآن هي تنظيف الأشياء المنسقة عندما تنشر الصفحة البيانات مرة أخرى.

خذ على سبيل المثال ، تنسيق العملة. دعونا نستخدم الدولار الأمريكي لهذه الأمثلة. عندما يكون للكائن خاصية كعمل عشري ، ستكون القيمة 79.95. سيكون عرض التحرير الخاص بك مثل:

<%= Html.FormattedTextBox(model => Model.Person.HourlyWage, "{0:C}") %>

كل هذا جيد وجيد لطلب الحصول على ، ولكن عند النشر ، ستكون القيمة $79.95, ، والتي عندما تخصص لهذا العشرية ، تصبح غير راضية بسرعة كبيرة وينتهي بها الأمر 0 هناك.

لذا فإن سؤالي هو ، كيف يمكنني تشغيل التعليمات البرمجية في مكان ما للعمل مع هذه القيمة قبل أن يذهب إطار عمل MVC ويبدأ في دفعه مرة أخرى إلى عرض ViewModel الخاص بي؟ أفضل أن يتم ذلك من جانب الخادم من جانب العميل.

شكرًا!!

هل كانت مفيدة؟

المحلول

حل واحد هو كتابة أ موثق نموذج مخصص التي ستكون قادرة على تحويل الربط $79.95 إلى حقل عشري في النموذج الخاص بك. حل آخر هو القيام بذلك على جانب العميل. في jQuery form.submit المعالج يمكنك تعديل قيم حقول الإدخال المراد نشرها.

نصائح أخرى

يمكنك استخدام مجلدات نموذج مخصصة لدفع البيانات المنشورة إلى كائن.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(
    [ModelBinder(typeof(YourModelBinderAttribute))]YourClass obj)
{
  // your code here

  return View();
}

public class MessageModelBinderAttribute : IModelBinder
{
    #region IModelBinder Members

    public object BindModel(
        ControllerContext controllerContext, 
        ModelBindingContext bindingContext)
    {
        YourClass obj = new YourClass();

        ValueProviderResult result;
        if (bindingContext.ValueProvider.TryGetValue(
            "YourPostedInputName", out result))
        {
            obj.Price = result.AttemptedValue;
        }

        return message;
    }

    #endregion
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top