سؤال

أستخدم كائنًا مجهولاً لتمرير سمات Html الخاصة بي إلى بعض الطرق المساعدة.إذا لم يقم المستهلك بإضافة سمة معرف، فأنا أريد إضافتها في طريقة المساعدة الخاصة بي.

كيف يمكنني إضافة سمة إلى هذا الكائن المجهول؟

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

المحلول

إذا كنت تحاول توسيع هذه الطريقة:

public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues);

على الرغم من أنني متأكد من أن ملحقات كائن Khaja ستعمل، فقد تحصل على أداء أفضل عن طريق إنشاء RouteValueDictionary وتمرير كائن RouteValues، وإضافة معلماتك الإضافية من السياق، ثم العودة باستخدام التحميل الزائد ActionLink الذي يأخذ RouteValueDictionary بدلاً من كائن:

هذا ينبغي أن تفعل خدعة:

    public static MvcHtmlString MyLink(this HtmlHelper helper, string linkText, string actionName, object routeValues)
    {
        RouteValueDictionary routeValueDictionary = new RouteValueDictionary(routeValues);

        // Add more parameters
        foreach (string parameter in helper.ViewContext.RequestContext.HttpContext.Request.QueryString.AllKeys)
        {
            routeValueDictionary.Add(parameter, helper.ViewContext.RequestContext.HttpContext.Request.QueryString[parameter]);
        }

        return helper.ActionLink(linkText, actionName, routeValueDictionary);
    }

نصائح أخرى

والطبقة الإضافة التالية سوف تحصل على ما تحتاجه.

public static class ObjectExtensions
{
    public static IDictionary<string, object> AddProperty(this object obj, string name, object value)
    {
        var dictionary = obj.ToDictionary();
        dictionary.Add(name, value);
        return dictionary;
    }

    // helper
    public static IDictionary<string, object> ToDictionary(this object obj)
    {
        IDictionary<string, object> result = new Dictionary<string, object>();
        PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(obj);
        foreach (PropertyDescriptor property in properties){
            result.Add(property.Name, property.GetValue(obj));
        }
        return result;
    }
}

وأفترض أنك يعني أنواع غير معروفة هنا، على سبيل المثال new { Name1=value1, Name2=value2} وما إذا كان الأمر كذلك، كنت من الحظ - أنواع مجهولة هي أنواع العادية في انهم الثابتة والتعليمات البرمجية المترجمة. ما يحدث لمجرد أن يكون تم تكوينها.

ما <م> يمكن فعله هو كتابة new { old.Name1, old.Name2, ID=myId } ولكن أنا لا أعرف إذا كان هذا هو حقا ما تريد. فإن بعض مزيد من التفاصيل حول الوضع (بما في ذلك نماذج التعليمات البرمجية) يكون مثاليا.

وبدلا من ذلك، يمكنك إنشاء كائن حاوية التي <م> دائما كان اسم المستخدم و كل ما يرد كائن آخر ما تبقى من الممتلكات.

public static string TextBox(this HtmlHelper html, string value, string labelText, string textBoxId, object textBoxHtmlAttributes, object labelHtmlAttributes){}

وهذا من شأنه أن قبول قيمة id يجب أن يكون النص والتسمية ينبغي أن يشير إلى. إذا كان المستهلك الآن لا يتضمن "الهوية" الملكية في textBoxHtmlAttributes، فإن طريقة إنشاء التسمية غير صحيحة.

وأنا لا يمكن أن تحقق من خلال انعكاس إذا تم إضافة هذه السمة في labelHtmlAttributes الاعتراض. إذا كان الأمر كذلك، أريد أن إضافته أو إنشاء كائن مجهول جديد الذي هو المضافة. ولكن لأنني لا يمكن أن تخلق نوع مجهول جديد من خلال السير سمات القديمة وإضافة بلدي "المعرف" السمة، انا من النوع عالقة.

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

ونأمل أن يكون هذا الرد هو مفهومة. انها نهاية اليوم، لا يمكن الحصول العقول بلدي في خط بعد الآن ..

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