2012-05-08 82 views
6

मैं एमवीसी के लिए नया हूं और जब मैंने कोड के लिए अपना मॉडल क्लास बनाया है तो प्रत्येक कुंजी आईडी कॉलम में [ScaffoldColumn(false)] सेट विशेषता थी। मैंने ऐसा इसलिए किया क्योंकि मैं नहीं चाहता था कि आईडी स्पष्ट रूप से विचारों में प्रदर्शित हो, और मुझे पता है कि इस समस्या के आसपास एक कार्य यूआई द्वारा जेनरेट किए गए एचटीएमएल को प्रत्येक दृश्य में हटाएगा जिसमें आईडी फ़ील्ड है।एमवीसी 3 मॉडल आईडी गुणों में झूठ पर सेट स्काफोल्ड कॉलम विशेषता का असली लाभ क्या है

मॉडल में ScaffoldColumnfalse पर सेट की गई समस्या को पहली बार देखा गया था जब किसी दृश्य के लिए एक संपादन विधि को निकाल दिया गया था, और मुझे यह त्रुटि मिली: एक अप्रत्याशित संख्या प्रभावित स्टेटमेंट अपडेट, डालने या हटाएं पंक्तियों (0) के। जब मैंने डीबग में कोड चलाया तो आईडी प्रॉपर्टी वास्तव में शून्य पर सेट की गई थी जैसा कि मेरे दृश्य में दर्शाया गया है HttpPost विधि संपादित करें।

मेरा प्रश्न है कि मुझे आशा है कि कोई विस्तार कर सकता है, एमवीसी में ScaffoldColumn जैसी विशेषता रखने का क्या मतलब है यदि आईडी को नियंत्रक विधि (ओं) में भेजा नहीं जा रहा है, तो इस मामले में HttpPost संपादित करें? क्या मुझे इस बारे में पुराने फैशन तरीके से जाना चाहिए, और एमवीसी मंदिरों द्वारा बनाए गए प्रत्येक दृश्य में एचटीएमएल मार्कअप को हटा देना चाहिए जब यह विशेषता किसी कुंजी/विदेशी कुंजी गुणों में नहीं जुड़ी हो?

यदि आप इस विशेषता को false पर सेट करते हैं तो मैंने पाया कि प्रत्येक HttpPost विधि में आईडी पैरामेट जोड़ रहा है, और SaveChanges() पर कॉल करने से पहले उचित आईडी प्रॉपर्टी फ़ील्ड सेट करने से पहले।

+0

इस ब्लॉग के साथी बताते हैं कि स्काफोल्ड कॉलम का उपयोग कैसे करें। यदि आप मेरे जैसे दृश्य व्यक्ति हैं तो आपको पोस्ट पसंद आएगा। इसमें स्क्रीनशॉट, वीडियो और सब कुछ है। http://20fingers2brains.blogspot.se/2013/03/scaffoldcolumn-dataannotation-attribute.html – PussInBoots

उत्तर

2

ठीक है, आप इसे एक संपादन योग्य क्षेत्र के रूप में मचान नहीं करना चाहते हैं, लेकिन निश्चित रूप से आप इसे फॉर्म में चाहते हैं जैसा आपने देखा था। समाधान इसे देखने में एक छिपे हुए क्षेत्र के रूप में मैन्युअल रूप से जोड़ना है। कुछ इस तरह: केवल

@Html.HiddenFor(model => model.id) 
+1

यह एक महान काम है जिसके बारे में मैंने नहीं सोचा था, लेकिन अधिकांश एमवीसी प्रोग्रामर विचारों में छिपाने वाले प्रमुख गुणों के साथ क्या आम तरीका है , या मचान को सेट करते समय अपना उदाहरण मानक तरीका है और फिर दृश्य पर एक छुपा फ़ील्ड जोड़ें? धन्यवाद ... – Shawn

+1

सुनिश्चित नहीं है कि मानक तरीका क्या है, लेकिन मैं इसे कैसे करता हूं। यह आश्चर्य की बात है कि छिपे हुए क्षेत्र को मचान करने का कोई तरीका नहीं है। आप * संपादक * ** को एक छिपे हुए क्षेत्र के रूप में एक संपत्ति प्रस्तुत कर सकते हैं, हालांकि: http://stackoverflow.com/questions/4542972/asp-net-mvc-hidden-field-from-data-annotations – McGarnagle

+1

.. जोड़ते हुए, मुझे लगता है कि सामान्य मचान में उत्पादन तैयार होने का मतलब नहीं है, बस कुछ कार्यात्मक जल्दी प्राप्त करने का एक तरीका है। – McGarnagle

0

ScaffoldColumn() Html.DisplayForModel तरह के तरीकों जो वास्तव में default templated views system introduced in MVC 2 का उपयोग के व्यवहार में परिवर्तन। यह विजुअल स्टूडियो विज़ार्ड को प्रभावित नहीं करता है जो एमवीसी के साथ भेजता है।

3

आप इस के लिए डेटा एनोटेशन इस्तेमाल कर सकते हैं और साथ काम:

[HiddenInput(DisplayValue=false)] 

इस तरह, आपके क्षेत्र दृश्य में एक छिपा इनपुट का उपयोग कर प्रदर्शित किया जाएगा। कोई भी बदलाव करने की आवश्यकता नहीं है, दृश्य को पता चलेगा कि इसे कैसे प्रदर्शित किया जाए।