2008-09-22 12 views
8

परीक्षण के लिए स्ट्रिंग करने के लिए एक दृश्य प्रस्तुत करना मैं एमवीसी पूर्वावलोकन 5 में नए व्यूइंजिन परिवर्तनों पर ब्रैड विल्सन (http://bradwilson.typepad.com/blog/2008/08/partial-renderi.html) द्वारा एक पोस्ट पढ़ रहा था और सोचा था कि स्ट्रिंग के लिए दृश्य प्रस्तुत करने में सक्षम होना बहुत अच्छा होगा परीक्षण में उपयोग के लिए। मुझे इस लेख से छाप मिलती है कि इसे हासिल करना संभव हो सकता है लेकिन यह पता नहीं लगा सकता कि कैसे।एमवीसी पूर्वावलोकन 5 -

मेरा मानना ​​है कि इससे हमें हमारे कुछ वॉटइन परीक्षणों (जो धीमे और अविश्वसनीय हैं) से दूर करने में सक्षम होंगे क्योंकि यह हमें यह जांचने की अनुमति देगा कि दृश्य अपेक्षित मूल्यों/पाठ के लिए स्ट्रिंग को सही ढंग से देखकर सही ढंग से प्रस्तुत किया गया है।

क्या किसी ने इस तरह कुछ लागू किया है?

उत्तर

5

यह मुश्किल है। आपको क्या करना है, इसे लागू करने वाले कस्टम स्ट्रीम क्लास में Response.Filter प्रॉपर्टी सेट करें। एमवीसी कंट्रीब प्रोजेक्ट में वास्तव में ऐसा करने के उदाहरण हैं। मैं वहां पर चारों ओर पोक करता था।

0

इसके अलावा परीक्षण, यह HTML से पीडीएफ कन्वर्टर्स जैसे घटकों के लिए उपयोगी हो सकता है। ये घटक आमतौर पर परिवर्तन के 2 तरीके का उपयोग करते हैं।

  • रूपांतरण विधि
  • एक HTML सामग्री पासिंग के लिए एक URL पासिंग (और आप वैकल्पिक रूप से आभासी रास्तों को हल करने baseurl निर्दिष्ट कर सकते हैं)

मैं नियंत्रक के अंदर एक अधिकृत फिल्टर का उपयोग कर रहा है, तो अगर मैं यूआरएल पर रीडायरेक्ट करता हूं तो प्रस्तुत एचटीएमएल एक लॉगिन पेज है (मैं कस्टम प्रमाणीकरण का उपयोग करता हूं)।

अगर मैं Server.Execute (यूआरएल) का उपयोग संदर्भ रखने के लिए, पद्धति असफल (HttpUnhandledException: त्रुटि बच्चे अनुरोध क्रियान्वित करने के लिए/खाका/PDF/1।)।

इसलिए मैंने प्रस्तुत किए गए ViewResult के HTML को पुनर्प्राप्त करने का प्रयास किया लेकिन मैं सफल नहीं हुआ।

1

मुझे लगता है कि आपको वही चाहिए जो आपको चाहिए। RenderPartialToString फ़ंक्शन एक स्ट्रिंग के रूप में नियंत्रक को वापस कर देगा। मुझे इसे here से मिलता है।

public static string RenderPartialToString(string controlName, object viewData) 
{ 
    ViewDataDictionary vd = new ViewDataDictionary(viewData); 
    ViewPage vp = new ViewPage { ViewData = vd }; 
    Control control = vp.LoadControl(controlName); 

    vp.Controls.Add(control); 

    StringBuilder sb = new StringBuilder(); 
    using (StringWriter sw = new StringWriter(sb)) 
    { 
     using (HtmlTextWriter tw = new HtmlTextWriter(sw)) 
     { 
      vp.RenderControl(tw); 
     } 
    } 

    return sb.ToString(); 
} 
संबंधित मुद्दे