2012-07-14 6 views
7

मेरे पास एक नियंत्रक है जो एक मॉडल बनाता है और मॉडल को पैरामीटर के रूप में पास करने के दृश्य को कॉल करता है। दृश्य में मॉडल के प्रकार को निर्दिष्ट करने वाला एक @ मॉडल कोड है। मैं एक ही दृश्य का पुन: उपयोग करना चाहता हूं, लेकिन नियंत्रक से एक अलग मॉडल पास करना चाहता हूं। क्या दृश्य में गतिशील रूप से (या सशर्त रूप से) @ model निर्देश बदलना संभव है?रेजर व्यू में एक अलग मॉडल में @model निर्देश को कैसे बदला जाए?

उदाहरण के लिए

, मेरे नियंत्रक कार्रवाई में:

var contactsModel = db.GetContacts(); 
var companiesModel = db.GetCompanies(); 
return (someCondition)? View(contactsModel):View(companiesModel); 

तो कैसे मैं एक दृश्य निर्देश में @model परिभाषित कर सकते हैं दोनों मॉडलों को पूरा करने के? मैं वही दृश्य पास मॉडल के प्रकार के आधार पर जानकारी प्रस्तुत करना चाहता हूं।

धन्यवाद।


अद्यतन:

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

यह संभव है, यह है कि यह कैसे किया जा सकता है।

एक दृश्य में मैं निर्धारित करें:

@model IEnumerable<MvcApplication1.Models.IBaseInterface> 

मॉडल वर्ग में मैं निर्धारित करें:

public interface IBaseInterface { } 

public class Contact: IBaseInterface {} 

public class Company: IBaseInterface {} 

फिर, एक दृश्य में मैं का उपयोग करें:

@if (Model is List<Contact>) { 
    @foreach (var item in (List<Contact>)Model) 
     { // Here item has type Contact } 
} 

@if (Model is List<Company>) { 
    @foreach (var item in (List<Company>)Model) 
     { // Here item has type Company } 
} 

निर्माण पूरी तरह से :)

उत्तर

4

क्या दृश्य में गतिशील रूप से (या सशर्त रूप से) @model निर्देश बदलना संभव है?

सं

आप विभिन्न मॉडलों इसका मतलब है कि आप अलग-अलग दृश्यों की जरूरत है पारित करने के लिए की जरूरत है: a view model per view:

return (someCondition) 
    ? View("Contacts", contactsModel) 
    : View("Companies", companiesModel);\ 

ASP.NET MVC में एक मौलिक नियम का पालन है।

0

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

यदि आप गतिशीलता के प्रशंसक हैं और दो मॉडल के गुण समान हैं तो दूसरा विकल्प यह है कि आप dynamic मॉडल पर दृश्य को जोड़ सकते हैं।

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