पेट्रिक से एक टिप्पणी के लिए धन्यवाद मैं इसे जाने एक ExpandoObject का उपयोग कर दिया और इसे इस तरह से काम कर रहा गया: अंतिम पंक्ति यह MVC में काम कर रही है ताकि यह भी भेजी जा सकती करने के लिए महत्वपूर्ण था
dynamic viewData = new ExpandoObject();
[email protected] = cssClasses;
if (controlId != null)
viewData.id = controlId;
if (title != null)
viewData.title = title;
// put the result into a route value dictionary so that MVC's EditorFor (etc) can interpret it
var additionalViewData = new RouteValueDictionary(viewData);
कि EditorFor आदि में अतिरिक्त दृश्य दृश्य पैरामीटर के रूप में
ऐसी परिस्थितियों में जहां मुझे अज्ञात वर्ग पारित किया जा रहा है और इसे स्वयं जोड़ने की आवश्यकता है, मैं प्रतिबिंब (और ExpandoObject कार्यान्वयन IDictionary का लाभ ले रहा हूं) का उपयोग कर रहा हूं। यहाँ इकाई परीक्षण मुझे लगता है कि यह काम करता है की जाँच करने के लिए लिखा था है:
[TestMethod]
public void ShouldBeAbleToConvertAnAnonymousObjectToAnExpandoObject()
{
var additionalViewData = new {id = "myControlId", css = "hide well"};
dynamic result = new ExpandoObject();
var dict = (IDictionary<string, object>)result;
foreach (PropertyInfo propertyInfo in additionalViewData.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
dict[propertyInfo.Name] = propertyInfo.GetValue(additionalViewData, null);
}
Assert.AreEqual(result.id, "myControlId");
Assert.AreEqual(result.css, "hide well");
}
स्रोत
2013-07-24 01:47:36
हाँ, या तो है कि या का उपयोग 'साथ dynamic'' ExpandoObject' बजाय :) –
@ PatrykĆwiek हाँ, सच। मुझे ExpandoObject tbh पसंद है, यह बहुत अच्छा है। –
मुझे समझ में नहीं आता कि आपने कोड में 'ऑब्जेक्ट' क्यों नहीं रखा? प्रश्न में दोनों गुमनाम प्रकार 'ऑब्जेक्ट' हैं। –