2011-07-08 13 views
11

मान लीजिए कि आपके पास पृष्ठ ए और पृष्ठ बी में लोगों की एक सूची है। और ये दोनों एल 2 एस में पृथक वर्ग हैं, जो दो अलग-अलग तालिकाओं का प्रतिनिधित्व करते हैं। तदनुसारसी # एमवीसी मॉडल बनाम व्यूबैग

... 
@model PeopleA 
... 
@foreach(var peopleA in Model.People) ... 

@foreach(var peopleB in //what?) 

, मुझे लगता है, मैं तीन विकल्प पालन करने के लिए: इसलिए, आप इस प्रकार एक मॉडल पारित कर सकते हैं नहीं।

  • पहला पृष्ठ आंशिक विचारों में पृष्ठ को भंग करना है ताकि मैं RenderAction सहायक के माध्यम से एक मॉडल पास कर सकूं। चूंकि मैं इन आंशिक विचारों का उपयोग केवल तभी करूंगा जब यह विकल्प मुझे आकर्षित न लगे।
  • दूसरा विकल्प व्यूबैग का उपयोग करना होगा जो मैं नहीं चाहता क्योंकि मैं दृढ़ता से टाइप किए गए मॉडल पसंद करता हूं।
  • पिछले एक, अंत में, जो मैं के बारे में उपयोग करने के लिए था, लेकिन ऐसा करने से पहले पूछना चाहता था, निम्नलिखित के रूप में एक मॉडल बनाने के लिए है:

ModelMyPage.cs

public List<PeopleA> peopleA { get; set; } 
public List<PeopleB> peopleB { get; set; } 

MyController। सीएस

... 
ModelMyPage m = new ModelMyPage(); 
m.peopleA = // query 
m.peopleB = // another query 
return(m); 

और आपको यह विचार मिला। क्या यह मेरा काम पूरा करने का वैध तरीका है या क्या मैं चाहता हूं कि ऐसा करने के लिए एक बेहतर सी # तरीका है?

उत्तर

17

पृष्ठ के लिए एक व्यूमोडेल बनाना, क्योंकि आपका विकल्प 3 वह तरीका है जो मैं करूँगा।

मेरा मानना ​​है कि यह भी अनुशंसित दृष्टिकोण है।

2

मैं इसे तीसरा तरीका करूँगा। साथ ही, यदि आप दोनों सरणियों में प्रत्येक व्यक्ति के लिए समान एचटीएमएल रेंडर करने के लिए जा रहे हैं, मैं उन्हें foreach से पहले concat होगा:

var person in Model.PeopleA.Concat(Model.PeopleB) 
2

आपका पहले और तीसरे विकल्प दोनों ठीक लग रहे हैं।

विज्ञापन 1) "केवल एक बार उनका उपयोग करना" एक अच्छा तर्क नहीं है। विचार व्यवस्थित करने के लिए आंशिक विचारों का उपयोग करें।

विज्ञापन 2) लुकअप सूची जैसे छोटे आइटम जोड़ने के लिए व्यूबैग का उपयोग करें।

विज्ञापन 3) दृश्य मॉडल एमवीसी में आम (बनने) आम हैं। यह शायद सबसे अच्छा तरीका है।

8

नहीं, कोई बेहतर विचार नहीं है। एएसपीएनटी एमवीसी में, एम व्यूमोडल्स के लिए खड़ा है, न कि व्यवसाय, डोमेन मॉडल। अपने विचारों के लिए ViewModels बनाने की अनुशंसा की जाती है और व्यापार मॉडल का उपयोग करने के लिए यह गणना नहीं की जाती है। आपको डोमेन के साथ नियंत्रक इंटरैक्शन की आवश्यकता को फिट करने के लिए, और नियंत्रक से इंटरैक्शन देखने के लिए नियंत्रक से

2

मैं आमतौर पर पृष्ठ के लिए एक मॉडल बना देता हूं, और इसे AccountDetailsPageModel नाम देता हूं। फिर जटिल मॉडल के लिए अन्य मॉडल इस के प्रचार हो सकते हैं।