मेरी ASP.NET MVC ऐप्लिकेशन में के लिए एक इंटरफेस पासिंग, मैं एक अंतरफलक है जो कई अलग दृष्टिकोण मॉडल के लिए टेम्पलेट के रूप में कार्य करता है है:एक ASP.NET MVC नियंत्रक लड़ाई विधि
public interface IMyViewModel
{
Client Client1 { get; set; }
Client Client2 { get; set; }
Validator Validate();
}
तो, मेरे विचार मॉडल इस तरह परिभाषित कर रहे हैं:
public interface MyViewModel1 : IMyViewModel
{
Client Client1 { get; set; }
Client Client2 { get; set; }
// Properties specific to MyViewModel1 here
public Validator Validate()
{
// Do ViewModel-specific validation here
}
}
public interface MyViewModel2 : IMyViewModel
{
Client Client1 { get; set; }
Client Client2 { get; set; }
// Properties specific to MyViewModel2 here
public Validator Validate()
{
// Do ViewModel-specific validation here
}
}
तब मैं वर्तमान में एक अलग नियंत्रक कार्रवाई प्रत्येक अलग प्रकार के लिए सत्यापन करना है मॉडल बंधन का उपयोग कर:
[HttpPost]
public ActionResult MyViewModel1Validator(MyViewModel1 model)
{
var validator = model.Validate();
var output = from Error e in validator.Errors
select new { Field = e.FieldName, Message = e.Message };
return Json(output);
}
[HttpPost]
public ActionResult MyViewModel2Validator(MyViewModel2 model)
{
var validator = model.Validate();
var output = from Error e in validator.Errors
select new { Field = e.FieldName, Message = e.Message };
return Json(output);
}
यह ठीक काम करता है- लेकिन अगर मेरे पास 30 अलग-अलग दृश्य मॉडल प्रकार होते हैं तो 30 अलग नियंत्रक क्रियाएं होंगी, सभी समान कोड विधि हस्ताक्षर से अलग कोड, जो खराब अभ्यास की तरह लगता है।
मेरा सवाल यह है कि, मैं इन सत्यापन कार्यों को कैसे समेकित कर सकता हूं ताकि मैं किसी भी प्रकार का व्यू मॉडल पास कर सकूं और इसकी वैधता() विधि को कॉल कर सकूं, बिना किसी प्रकार के देखभाल के?
पहले तो मुझे कार्रवाई पैरामीटर के रूप इंटरफेस ही उपयोग करने की कोशिश:
public ActionResult MyViewModelValidator(IMyViewModel model)...
लेकिन यह काम नहीं किया: मैं एक Cannot create an instance of an interface
अपवाद मिलता है। मैंने सोचा कि मॉडल का एक उदाहरण नियंत्रक कार्रवाई में पारित किया जाएगा, लेकिन स्पष्ट रूप से यह मामला नहीं है।
मुझे यकीन है कि मुझे कुछ आसान याद आ रहा है। या शायद मैंने अभी यह सब गलत किया है। क्या कोई मेरी मदद कर सकता है?
मैं पूरी तरह से समय की बाधाओं के कारण इस दृष्टिकोण के लिए गया था, लेकिन आपने यह भी समझाया कि ऑब्जेक्ट पहले से ही एक उदाहरण क्यों नहीं है जब यह नियंत्रक में पास हो जाता है, जो जानना उपयोगी होता है। –