2010-11-11 7 views
13

लोग,रेजर दृढ़ता से टाइप किए गए Html.ActionLink के साथ आसानी से काम नहीं करता है?

हम दृढ़ता से टाइप किया कार्रवाई लिंक तरीकों कि इस तरह दिखना उपयोग करने के लिए कोशिश कर रहे हैं:

Html.ActionLink<HomeController> 
उस्तरा दृश्य इंजन में

मुझे पता है कि हमें हर समय उनका उपयोग नहीं करना चाहिए क्योंकि यह फिल्टर इत्यादि को अनदेखा करता है, लेकिन तथ्य यह है कि हम उनका उपयोग करते हैं।

अगर मैं ऐसा तरह उस्तरा में सीधे इस का उपयोग करने का प्रयास करें: क्योंकि उस्तरा को पार्स नहीं है

CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments 

आप संकलित कोड को देखें, तो यह है:

@Html.ActionLink<HomeController>(c => c.Index, "Home") 

मैं की कोई त्रुटि मिलती है जैसा कि आप उम्मीद करेंगे उतना बयान। त्रुटि लाइन है कि से संकलित स्रोत, इस तरह दिखता है:

... 
Line 101:    #line 13 "C:\dev\TheNetwork\POC\Web\Views\Policy\Edit.cshtml" 
Line 102: Write(Html.ActionLink); 
Line 103: 
Line 104:    
Line 105:    #line default 
Line 106:    #line hidden 
Line 107: WriteLiteral("<PolicySectionController>(c => c.Edit(null), "New\")\r\n\r\n\r\n\r\n"); 

संक्षिप्तता के लिए छोड़े गए :) आप देख सकते हैं बहुत सामान, यह "<" मुझे लगता है यह एक HTML के रूप में है कि व्याख्या है पर विभाजन टैग, लेकिन मुझे यकीन नहीं है।

मुझे एक कामकाज मिला, लेकिन यह बदसूरत है। यह काम करता है:

@{Write(Html.ActionLink<PolicySectionController>(c => c.Edit(null), "New"));} 

क्या किसी को ऐसा करने का बेहतर तरीका पता है?

उत्तर

18

हाँ, सामान्य तरीकों का उपयोग करने के लिए आपको माता-पिता का उपयोग करके अभिव्यक्ति से बचने की आवश्यकता है। इस काम होगा:

@(Html.ActionLink<PolicySectionController>(c => c.Edit(null), "New")) 
+0

हाँ, यह काम करता है! अभी भी आदर्श नहीं है, लेकिन मेरे पास गड़बड़ी से बेहतर है, धन्यवाद :) – CubanX

+3

दुर्भाग्यवश (इस परिदृश्य के लिए) रेजर '<'एक चरित्र के रूप में उपयोग करता है जो संक्रमण को निर्धारित करता है और एक स्पष्ट तरीके से मार्कअप और जेनेरिक विधि दोनों का समर्थन करना संभव नहीं है। – marcind

+0

बीटीडब्ल्यू, उदाहरण में 'शून्य' अनावश्यक है, निम्नलिखित ही '@ (HTML.ActionLink (c => c.Edit(), "नया") पर काम करेगा)) –

0

यह मेरे लिए काम किया:

@using MyProjectNamespace.Controllers; 
@using Microsoft.Web.Mvc; // MVC Futures 
@{ 
    ViewBag.Title = "Index"; 
} 
<h1>Index</h1> 
@(Html.ActionLink<FooController>(f => f.Index(), "Go (Strongly Typed)")) 

(दोनों "@using" बयान अनिवार्य हैं, अन्यथा यह काम नहीं किया)

1

मुझे लगता है कि आप भी कर सकते हैं: @Html.ActionLink((FooController c) => c.Edit(null), "New")