2012-03-23 5 views
6

एक एमवीसी 3 आवेदन में, क्या इसे .cshtml दृश्य में एक रेजर ब्लॉक @{ } के अंदर एक प्रयास पकड़ ब्लॉक का उपयोग करने के लिए बुरी आदत माना जाता है?एक बुरे अभ्यास को देखने में कोशिश करें?

+0

पृथ्वी पर क्या है? – SLaks

+0

@ एसएलएक्स - जैसा कि आपने कहा था, इसके लिए कोई अच्छा कारण नहीं है और गलत जगह पर तर्क होगा - मैंने अभी तक यह नहीं किया है, लेकिन बस थोड़ा और आगे चाहता था। कारण यह है कि मुझे एहसास हुआ कि मेरे पास उस ऑब्जेक्ट को जोड़ने से दृश्य में अपवाद था, जिस पर एक बिंदु पर वैध विदेशी था, लेकिन उस विदेशी वस्तु को डेटाबेस से हटा दिया गया था। यहां एक एसोसिएशन का एक उदाहरण दिया गया है: 'phase.Container = कंटेनर। जहां (cont => cont.ContainerId == phase.ContainerId) .SingleOrDefault(); '। मुझे यहां अपवादों को संभालना होगा। क्या सभी linq कोशिश पकड़ने के साथ घिरा होना चाहिए? –

उत्तर

12

बहुत कुछ।

दृश्यों में कोई वास्तविक तर्क नहीं होना चाहिए; कुछ भी जो अपवाद फेंक सकता है नियंत्रक में आता है।

+19

इस तरह के कंबल बयान कभी सटीक नहीं हैं। क्या आप कह रहे हैं कि किसी भी कोड को देखने में बुरा फॉर्म है? तो रेजर क्यों मौजूद है? और यदि आपके पास एक दृश्य में कोड है, तो निश्चित रूप से ऐसे मामले हो सकते हैं जहां अपवाद (जैसे कि बाहरी फ़ाइल की अनुपलब्धता) को संभालने की आवश्यकता है। – Gullbyrd

+1

क्या होगा यदि यह साझा आंशिक दृश्य है और इसके लिए कोई नियंत्रक नहीं है? –

+0

@MaksimVi .: तो आपको इसके बजाय एक बच्चे की कार्रवाई का उपयोग करना चाहिए। – SLaks

1

मैं ऐसा कहूंगा। इष्टतम मार्ग मॉडल को दृश्य तक पहुंचने से पहले नियंत्रक द्वारा सत्यापित दृश्य को पास करना होगा।

2

अच्छा आपका उपयोग आपके आवेदन के विनिर्देशों पर निर्भर करता है, हालांकि आपको अपने विचारों को यथासंभव नंगे रखने की कोशिश करनी चाहिए। आदर्श रूप से कोड वैधता नियंत्रक में सत्यापित की जाएगी और दृश्य को कभी नहीं पारित किया जाएगा।

2

ऐसे कोड को दृश्य में न रखें। दृश्य केवल आपके प्रदर्शन मार्कअप के लिए जितना संभव हो सके होना चाहिए। आप उस कंट्रोलर एक्शन विधि में पकड़ने की कोशिश कर सकते हैं जो डेटा को देखने के लिए आपूर्ति करता है।

public ActionResult GetUser(int id) 
{ 

    try 
    { 
    //Get the ViewModel and return the correct View. 
    } 
    catch(Exception ex) 
    { 
    //log the error 
    return View("YourErrorView"); 
    } 

} 

ध्यान रखें कि एमवीसी पर जोर देने वाली चीजों में से एक चिंताओं को अलग करना है। दृश्य स्वच्छ और पठनीय मार्कअप होना चाहिए।

0

यह करने के लिए एक अच्छी बात नहीं है। एमवीसी ढांचे को तर्क के साथ दृश्य को अलग करने के लिए डिज़ाइन किया गया है। तो नियंत्रक में तर्क होना चाहिए, जहां यह होना चाहिए।

1
@{ 
try 
{ 
    <td> 
     @((TradeType)Enum.Parse(typeof(TradeType), item.AppCode)).GetDescription(); 
    </td> 
} 
catch 
{ 
    <td>@item.AppCode 
    </td> 
} 
} 
+3

वास्तव में प्रश्न का उत्तर नहीं: सवाल यह था कि यह अच्छा अभ्यास था, न कि यह कैसे किया जाता है। – Stephen

+0

हालांकि यह सवाल का जवाब दे सकता है, लेकिन यह किसी भी स्पष्टीकरण के पीछे नहीं छोड़ा गया कि यह क्यों काम करता है। यह उत्तर बाद के आगंतुकों के लिए अधिक मूल्य नहीं जोड़ता है जो एक ही समस्या हो सकती है। कुछ स्पष्टीकरण शामिल करने के लिए कृपया अपना उत्तर विस्तृत करें। –

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