سؤال

ومع إضافة MVC 2 لمن HtmlHelper EditorFor () أنه ليس من الممكن لخلق كتبته بقوة العرض ومحرر قوالب لكائن نموذج معين، وبعد تافه مع ذلك أنا الحيرة قليلا عن كيفية تمرير البيانات نموذج إضافية لل محرر دون أن تفقد-الكتابة القوية للسيطرة المحرر.

والكلاسيكية مثال: المنتج يحتوي الفئة. ProductEditor ديه دروبدوونليست التصنيف يحتوي على أسماء جميع الفئات. تتم كتابة ProductEditor بقوة على المنتج، ونحن بحاجة لتمرير في SelectList الفئات وكذلك المنتج.

ومع طريقة العرض القياسية كنا التفاف البيانات النموذجي في نوع جديد وتمرير ذلك على طول. مع EditorTemplate نفقد بعض وظائف القياسية إذا نحن نمر في نموذج مختلط يحتوي على أكثر من كائن واحد (أول شيء لاحظته كان كل من LabelFor / TextBoxFor الطرق كانت تنتج أسماء كيان مثل "Model.Object" بدلا من "كائن فقط ").

وأنا أفعل ذلك الخطأ أو ينبغي Html.EditorFor () لديها معلمة إضافية ViewDataDictionary / نموذج؟

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

المحلول

ويمكنك إما إنشاء ViewModel العرف الذي على حد سواء خصائص OR ستحتاج إلى استخدام ViewData لتمرير تلك المعلومات في.

نصائح أخرى

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

ويتم استخدامه في وجهة النظر على النحو التالي:

<%= Html.DropDownList
            (
            "CategoryCode",
            MvcApplication1.Utility.EditorTemplates.SelectListForEnum(typeof(WebSite.ViewData.Episode.Procedure.Category), selectedItem)
            ) %>

وزينت التعداد التصنيف مع الوصف سمات لاستخدامها القيم النص في البنود الاختيار:

 public enum Category 
        {
            [Description("Operative")]
            Operative=1,
            [Description("Non Operative")]
            NonOperative=2,
            [Description("Therapeutic")]
            Therapeutic=3 
        }
        private Category _CategoryCode; 
        public Category CategoryCode 
        {
            get { return _CategoryCode; }
            set { _CategoryCode = value; }
        }

ووSelectListForEnum يبني قائمة اختيار العناصر باستخدام تعريف التعداد ومؤشر للعنصر المحدد حاليا، على النحو التالي:

        public static SelectListItem[] SelectListForEnum(System.Type typeOfEnum, int selectedItem)
    {
        var enumValues = typeOfEnum.GetEnumValues();
        var enumNames = typeOfEnum.GetEnumNames();
        var count = enumNames.Length;
        var enumDescriptions = new string[count];
        int i = 0;
        foreach (var item in enumValues) 
        {
            var name = enumNames[i].Trim();
            var fieldInfo = item.GetType().GetField(name);
            var attributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
            enumDescriptions[i] = (attributes.Length > 0) ? attributes[0].Description : name;
            i++;
        }
        var list = new SelectListItem[count];
        for (int index = 0; index < list.Length; index++)
        {
            list[index] = new SelectListItem { Value = enumNames[index], Text = enumDescriptions[index], Selected = (index == (selectedItem - 1)) };
        }
        return list;
    }

والنتيجة النهائية هي DDL عرض جيد.

ويساعد هذا الأمل. أي تعليقات حول أفضل الطرق للقيام بذلك وسيتم تقدير كبير.

وحاول استخدام ViewData.ModelMetadata هذا يحتوي على كافة الشروح صفك.

والمادة ممتازة <لأ href = "http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html" يختلط = "نوفولو noreferrer "> http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html

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