2011-02-27 16 views
5

में मैं एएसपी.नेट एमवीसी 3 चला रहा हूं और मैं अपने मॉडल के लिए एक संपादन दृश्य देख रहा हूं। मुझे FullName संपत्ति मिली है जिसे मैं "पूर्ण नाम" के रूप में प्रस्तुत करना चाहता हूं। - दो हस्ताक्षरों पहले सिर्फ अभिव्यक्ति और दूसरे दोनों अभिव्यक्ति और ले जा ले जा रहे हैं,"विधि के लिए कोई ओवरलोड नहीं 'लेबलफॉर' 2 तर्क लेता है" एमवीसी 3

<div class="display-label"> 
    <%: Html.LabelFor(model => model.FullName, "Full name") %> 
</div> 

अब IntelliSense पता चलता है कि अधिभार मौजूद है:

यहाँ हमलावर लाइन (रों) है प्रदर्शित करने के लिए स्ट्रिंग। हालांकि जब मैं पृष्ठ पर ब्राउज़ करता हूं तो मुझे शीर्षक अपवाद मिलता है ('कोई अधिभार नहीं ...')।

किसी को भी इस अधिभार का उपयोग करके कोई सफलता मिली है, और मुझे क्या याद आ रही है पर कोई सलाह है?


अपडेट: मैंने एमवीसी 3 को पुनः प्राप्त करने का प्रयास करने का प्रयास नहीं किया है। हालांकि मैं त्रुटि पृष्ठ पर संकलक उत्पादन में इस पर ध्यान दिया है:

c:\Windows\assembly\GAC_MSIL\System.Web.Mvc\2.0.0.0__31bf3856ad364e35\ 
    System.Web.Mvc.dll: (Location of symbol related to previous error) 

मेरे लिए इंगित करता है कौन सा है कि मैं MVC 2, नहीं MVC 3.

मैं क्या गलत कॉन्फ़िगर किया है, का उपयोग कर रहा है या क्यों हैं मेरे आईआईएस एमवीसी 3 के बजाय एमवीसी 2 का उपयोग कर रहे हैं? मैं इसे कैसे ठीक करूं?

उत्तर

8

यदि आपको एक बिंदु पर एक एमवीसी 2 प्रोजेक्ट था तो आपको अपनी वेब कॉन्फ़िगरेशन जांचनी चाहिए।

आप परियोजना संदर्भों में डीएलएल के सही संस्करण का संदर्भ दे रहे हैं लेकिन जब यह चलता है तो वेब कॉन्फ़िगरेशन में 2.0.0.0 में खींच रहा है ...?

http://blog.devlpr.net/2010/07/27/upgrading-an-asp-net-mvc-2-project-to-asp-net-mvc-3/

मेरी MVC3 ऐप्लिकेशन में:

<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
+0

धन्यवाद, यह उतना आसान के रूप में आप का सुझाव दिया था। –

4

इसके बजाय कि ऐसा करने का, [DisplayName] विशेषता के साथ मैदान को सजाने:

[DisplayName("Full name")] 
public string FullName { get; set; } 

तो आप नियमित रूप से उपयोग कर सकते हैं अधिभार:

<%: Html.LabelFor(model => model.FullName) %> 
+0

मैं इस विकल्प के बारे में पता है लेकिन मैं अपने मॉडल जो इस कम करता है के रूप में उत्पन्न वर्गों का उपयोग कर रहा हूँ सरल से; मैं इसे लागू कर सकता हूं लेकिन मेरा सवाल वास्तव में 'अधिभार काम क्यों नहीं कर रहा है'। –

+0

@Kirk - हां, कि निष्पक्ष काफी है। मैं यह भी तर्क था कि आप उत्पन्न वर्गों (मैं L2SQL/एफई अनुमान लगा रहा हूँ) के लिए बाध्यकारी नहीं होना चाहिए, लेकिन है कि एक और चर्चा :) है। हो सकता है कि @tiagoinu सही है - कुछ सही कॉन्फ़िगर नहीं किया गया है - web.config शायद? कुछ और ऐसा करने का प्रयास करें जो MVC3 विशिष्ट है, और सुनिश्चित करें कि यह काम करता है। – RPM1984

1

वहाँ एक overload कि दो पैरामीटर लेता है।

लेकिन आप कोशिश कर सकते हैं

<%: Html.LabelFor(model => model.FullName) %> 

और अपने मॉडल

public class ModelClass{ 

.. 
.. 

[DisplayName("Full Name")] 
public string FullName{ 
+0

मैं इस विकल्प के बारे में पता है लेकिन मैं अपने मॉडल के रूप में उत्पन्न वर्गों का उपयोग कर रहा हूँ; मैं इसे कार्यान्वित कर सकता हूं लेकिन मेरा सवाल वास्तव में 'अधिभार काम क्यों नहीं कर रहा है'। –

0

विधि LabelFor<TModel, TValue>(HtmlHelper<TModel>, Expression<Func<TModel, TValue>>, String) में MVC 3.0 पर पेश किया गया था।


http://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions(v=vs.98).aspx
तुलना करें
http://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.aspx (MVC 2.0) के साथ।

हालांकि जब मैं पृष्ठ पर ब्राउज़ मैं शीर्षक अपवाद ('कोई अधिभार ...')।

शायद एमवीसी 3.0 आपके आईआईएस पर सक्रिय नहीं है।

2

आप सुनिश्चित करें कि आप अपनी परियोजना में MVC 3.0 का संदर्भ बनाने की जरूरत है। चूंकि इस असेंबली का एक मजबूत नाम है, इसलिए आपको इसे प्राप्त करना या असफल होना चाहिए।

इस के लिए, दृश्य स्टूडियो में, समाधान एक्सप्लोरर, [परियोजना], संदर्भ जाँच System.Web.Mvc पर क्लिक करें और संपत्ति ग्रिड में 'संस्करण' संपत्ति की जाँच करें। यह 3.x होना चाहिए।

आपको लगता है कि है, की तुलना में web.config या machine.config की जाँच करें और सुनिश्चित करें कि MVC 2.x. पर कोई मजबूर पुनर्निर्देशन है

इसके लिए, प्रोजेक्ट में सभी वेब.कॉन्फिग फाइलों में, वैश्विक स्तर पर और एमवीसी संस्करण को प्रतिस्थापित करें (इस सिस्टम.बेब.एमवीसी, संस्करण = 2.0.0.0 को इस सिस्टम द्वारा बदलें। वेब.एमवीसी, संस्करण = 3.0.0.0)।

अंततः, आप भी पुनर्निर्देशन 2 से 3 के लिए रूट web.config में इस स्निपेट का उपयोग कर के लिए मजबूर कर सकते हैं:

... 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/> 
     <bindingRedirect oldVersion="2.0.0.0" newVersion="3.0.0.0"/> 
    </dependentAssembly> 
    </assemblyBinding> 
</runtime> 
... 
+0

धन्यवाद - यह एक अच्छा जवाब है। –

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