c# - MVC सार ViewModel, मान्यता गुण(गतिशील रूप से)



asp.net-mvc attributes (0)

उम्मीद है कि मुझे कुछ स्पष्ट दिख रहा है, लेकिन मैंने कुछ लिखे गए कोड के साथ एक मुद्दा उठाया है, और ऐसा महसूस नहीं है कि मैंने अपना कोड सही तरीके से लिखा है

तो, मान लें कि मेरे पास निम्न मॉडल है:

public class SampleViewModel {
    [Required]
    public string Property1 { get; set; }
    [Required]
    [EmailAddress]
    public string Property2 { get; set; }
    public IList<AbstractModel> Items { get; set; }
}

और फिर मेरे पास यह सार दृश्य मॉडल है:

public abstract AbstractModel {
    [Required(ErrorMessage = "This field is required")]
    public virtual string Value { get; set; }
}

और इन ठोस दृश्य मॉडल:

public ConcreteModel1 : AbstractModel { }
public ConcreteModel2 : AbstractModel { }

मेरे नियंत्रक के भीतर, मेरे पास निम्न कोड है (यह वास्तव में कहीं और किया जा रहा है, लेकिन इस नमूना के लिए, यह ठीक है):

var model = new SampleViewModel();
var fields = new List<AbstractModel>() {
    new ConcreteModel1() { Value = model.Property1 },
    new ConcreteModel2() { Value = model.Property2 },
};
model.Fields = fields;
return View(model);

SampleViewModel आंशिक दृश्य (जैसा कि मेरे पास प्रत्येक दृश्य मॉडल प्रकार के लिए है) के भीतर, मेरे पास निम्न है:

@model SampleViewModel
@for(var i = 0; i < Model.Items; i++) {
    @Html.EditorFor(m => Model.Items[i])
}

चलो कहना है कि मेरे पास प्रत्येक एब्स्ट्रक मोडेल के अनुसार एक अलग आंशिक दृश्य (बहुत अलग लेआउट आवश्यकताओं के साथ) है।

कंक्रीटमोडेल 1 के लिए उदाहरण:

@model ConcreteModel1
@Html.TextboxFor(m => m.Value)

और कंक्रीटमॉडेल 2 के लिए:

@model ConcreteModel2
@Html.DisplayFor(m => m.Value)

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

आदर्श रूप से मैं यह जानकारी अब्बर मोडेल के लिए उपलब्ध होना चाहता हूं। मान्यकरण हो रहा है, लेकिन मुझे क्लाइंट पर मूलभूत मान्यता प्राप्त हो रही है (एबर्टमोडेल का मान आवश्यक विशेषता के माध्यम से), लेकिन मैं अपने नमूनाव्वैलमोडल से एबर्टमोडेल में सत्यापन आवश्यकताओं को पूरा करने में सक्षम होना चाहता हूं।

उम्मीद

मैं वास्तव में क्या करना चाहूंगा, अब्स्ट्रक मोडेल के वैल्यू प्रॉपर्टी के लिए किसी तरह उस संपत्ति का प्रतिरूपण कर सकता है जिसे उस में पारित किया जाता है, जिससे कि यह केवल मूल मॉडल के लिए एक प्रॉक्सी के रूप में काम कर रहा हो, लेकिन उसने नमूना दृश्यमॉडेल (या विशेष रूप से इसे Property1 संपत्ति)।

तो महत्वपूर्ण बात यह है कि मेरे खेतों की निम्नलिखित रचना पर विचार करना:

var fields = new List<AbstractModel>() {
    new ConcreteModel1() { Value = model.Property1 },
    new ConcreteModel2() { Value = model.Property2 },
};

एब्जेक्ट मोडल्स को यह कैसे पता है कि उनके मूल्यों की अपेक्षा की जाती है: आवश्यक, और आवश्यक और एक ईमेल पता, उन गुणों के आधार पर जो उन्हें बनाने के लिए उपयोग किए जाते हैं?

आपके इनपुट के लिए धन्यवाद।





abstract