मैं एक MVC 3 RTM प्रोजेक्ट के लिए अपने App_Code फ़ोल्डर में रेजर घोषणात्मक सहायक बनाने की कोशिश कर रहा था।
मैं जिस समस्या में भाग गया, वह एक्शनलिंक की तरह MVC HtmlHelper एक्सटेंशन उपलब्ध नहीं है। इसका कारण यह है कि संकलित सहायकों से प्राप्त होता है System.Web.WebPages.HelperPage
, और यद्यपि यह एक Html
संपत्ति को उजागर करता है, इसके System.Web.WebPages.HtmlHelper
बजाय इसके प्रकार का System.Web.Mvc.HtmlHelper
।
मुझे किस प्रकार की त्रुटि हो रही थी, उसका एक उदाहरण है:
'System.Web.Mvc.HtmlHelper' में 'ActionLink' के लिए कोई परिभाषा नहीं है और न ही कोई विस्तार विधि 'ActionLink' टाइप का पहला तर्क स्वीकार करते हुए 'System.Web.Mvc.HtmlHelper' पाया जा सकता है (क्या आप एक निर्देश का उपयोग कर गायब हैं या एक विधानसभा संदर्भ?)
मेरा एकमात्र समाधान मेरा अपना हेल्परपेज बनाना और Html संपत्ति को ओवरराइड करना है:
using System.Web.WebPages;
public class HelperPage : System.Web.WebPages.HelperPage
{
// Workaround - exposes the MVC HtmlHelper instead of the normal helper
public static new HtmlHelper Html
{
get { return ((System.Web.Mvc.WebViewPage) WebPageContext.Current.Page).Html; }
}
}
फिर मुझे प्रत्येक सहायक के शीर्ष पर निम्नलिखित लिखना होगा:
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
@Html.ActionLink("Index", "Home")
}
क्या MVC 3 में यह कठिन है, या मैं कुछ गलत कर रहा हूं?