2011-05-26 14 views
6

में स्थिर संदर्भ से System.Web.Routing.RequestContext तक पहुंच HtmlHelper.GenerateLink() पर कॉल करने के लिए मुझे दृश्य मॉडल में System.Web.Routing.RequestContext का उपयोग करने की आवश्यकता है।एमवीसी 2.0

MVC 1.0 में यह संभव था कास्टिंग द्वारा स्थिर संदर्भ प्राप्त करने के लिए वर्तमान IHttpHandler:

var context = ((MvcHandler) HttpContext.Current.CurrentHandler).RequestContext; 

अब परियोजना MVC 2.0 में अपग्रेड किया गया है और यह अपवाद डाली पर फेंक दिया जाता है:

'SystemExecuteHttpHandlerWrapper' प्रकार का ऑब्जेक्ट डालने में असमर्थ 'System.Web.Mvc.MvcHandler' टाइप करने के लिए।

मुझे यकीन नहीं है कि यह प्रासंगिक है लेकिन यह आईआईएस 6 पर .NET 4.0 में चलाया जा रहा है।

उत्तर

11

मैं नहीं जानता कि आप System.Web.Routing.RequestContext साथ क्या करना चाहते क्या:

public static MvcHtmlString GenerateMyLink<MyViewModel>(this HtmlHelper<MyViewModel> html) 
{ 
    MyViewModel model = html.ViewData.Model; 
    RequestContext rc = html.ViewContext.RequestContext; 
    //TODO: use your view model and the HttpContext to generate whatever link is needed 
    ... 
} 

और अपने में दृढ़ता से MyViewModel दृश्य बस के लिए लिखा था: यह एचटीएमएल सहायकों क्या करना चाहिए रहे हैं क्या है? बाहर की जाँच:

var context = new HttpContextWrapper(System.Web.HttpContext.Current); 
var routeData = RouteTable.Routes.GetRouteData(context); 

// Use RouteData directly: 
var controller = routeData.Values["controller"]; 

// Or with via your RequestContext: 
var requestContext = new RequestContext(context, routeData); 
controller = requestContext.RouteData.Values["controller"] 
+1

धन्यवाद बेन - इसे स्वीकार करना क्योंकि यह सीधे मेरे प्रश्न का उत्तर देता है लेकिन मैं सुझाव देता हूं कि भविष्य के पाठकों को डारिन के जवाब पर ध्यान दें। –

+0

अच्छा काम @benwasd! –

16

मुझे HtmlHelper.GenerateLink() को कॉल करने के लिए सिस्टम मॉडल में System.Web.Routing.RequestContext का उपयोग करने की आवश्यकता है।

सिद्धांत में एक ओर जहां आप लिख सकते हैं:

var rc = HttpContext.Current.Request.RequestContext; 

व्यवहार में आप पूरी तरह कभी नहीं एक दृश्य के मॉडल में कुछ इस तरह करना चाहिए।

<%= Html.GenerateMyLink() %> 
+0

धन्यवाद डैरिन -इस मुझे बतख रिफैक्टरिंग विरासत कोड :) –

+0

@ दाऊद नील की कोशिश कर रहा है, ASP.NET MVC 1.0 पहले से ही विरासत कोड माना जाता है? जबरदस्त हंसी। मुझें यह पसंद है। –

+2

नौकरी शुरू करने से पहले जो कुछ भी लिखा गया था वह मेरे लिए विरासत है! : डी –

संबंधित मुद्दे