2009-08-11 17 views
5

मेरे पास लिंक-टू-एसक्यूएल में मॉडल कक्षाएं हैं जो आंशिक कक्षाओं के साथ डेटा एनोटेशन विशेषताओं और xVal के संदर्भ में चिह्नित हैं।एएसपी.नेट एमवीसी मॉडल/व्यूमोडेल प्रमाणीकरण

जब मैं सीधे मॉडल पर एक दृश्य बांधता हूं तो सबकुछ बढ़िया काम करता है, दोनों जेएस एक्सवीएल और सर्वर साइड डबल चेक द्वारा उत्पन्न होते हैं।

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

// foo model 
public class Foo { 
    public string FooField { ... } 
    public Bar Bar { ... } 
} 

// bar model, where bar is a parent relationship of foo in the db 
public class Bar { 
    public string BarField { ... } 
} 

// view model stuff 
public class FooViewModel { 
    private Foo foo; 

    public FooViewModel() { 
     foo = new Foo() { Bar = new Bar() }; 
    } 

    public Foo Model { 
     get { return foo; } 
     set { foo = value; } 
    } 

    public string BarField { 
     get { return foo.Bar.BarField; } 
     set { foo.Bar.BarField = value; } 
    } 

    public string ExtraViewModelField { 
     get; set; 
    } 
} 

यह दृष्टिकोण दृश्य मॉडल वर्ग को सही तरीके से पॉप्युलेट करता है और भंडार सही ढंग से रिकॉर्ड को पॉप्युलेट कर सकता है।

यह मान्यता को तब तक नहीं खींचता है। मैंने उत्सर्जित क्लाइंट कोड को देखा है और सत्यापन सरणी xval के लिए खाली है। इसके अतिरिक्त, IsValid के लिए सर्वर साइड चेक हमेशा सत्य है।

क्या मेरे पास डेटा एनोटेशन खींच सकता है हालांकि दृश्य मॉडल के गुण इस तरह के सत्यापन के लिए हैं, या मुझे यह एक और तरीका करना चाहिए?

+0

अगर आप अपने प्रश्न का उत्तर देते हैं तो कृपया उत्तर दें –

उत्तर

0

क्या आप अपना एक्सवल हेल्पर कोड और कुछ एचटीएमएल पोस्ट कर सकते हैं। हेल्पर?

यह इकाई और उपसर्ग लेता है, इसलिए मुझे नहीं लगता कि आपके दृश्य मॉडल के भीतर संरचना में कोई फर्क क्यों पड़ता है। कुछ की तरह:

<%= Html.ClientSideValidation<Foo>("Foo") %> 
<%= Html.ClientSideValidation<Bar>("Foo.Bar") %> 

जेम्स

+0

मेरे पास मेरे सामने सही कोड नहीं है, लेकिन मेरे पास कुछ है, <% = Html.ClientSideValidation ()%>, यह तब काम करता है जब यह काम करता है यह है। चूंकि सर्वर पक्ष पर IsValid कॉल सही ढंग से काम नहीं करता है या तो मुझे लगता है कि यह एक एनोटेशन मुद्दा एक xval मुद्दा नहीं है, लेकिन गलत हो सकता है। – blu

4

आप आंशिक उपयोग करें, और उप-प्रकार में पार कर लेते हैं, तब भी आप अर्हता प्राप्त करने की जरूरत है। निम्नानुसार देखें:

<%@ Control Language="C#" 
        Inherits="System.Web.Mvc.ViewUserControl<MvcWeb.Models.OrderDetail>" %> 

<% using (Html.BeginForm()) { %> 

    <fieldset> 
     <legend>Fields</legend> 
      <%= Html.Hidden("OrderId", Model.OrderId) %> 
      <%= Html.Hidden("ProductId", Model.ProductId)%> 
     <p> 
      <label for="Quantity">Quantity:</label> 
      <%= Html.TextBox("OrderDetails.Quantity", Model.Quantity)%> 
      <%= Html.ValidationMessage("OrderDetails.Quantity", "*") %> 
     </p> 
     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 

<% } %> 

ध्यान दें कि प्रकार ऑर्डर विवरण है, लेकिन मैं अभी भी सत्यापन संदेशों से निपटने के लिए उपसर्ग कर रहा हूं।

+1

मुझे यह वही समस्या थी। – hminaya

0

यदि मैं इसे सही ढंग से पढ़ता हूं तो आप linq पर SQLAnotations को SQL वर्ग में डाल रहे हैं, फिर अपने व्यूमोडेल गुणों को आपके साथ linq से sql क्लास में पॉप्युलेट कर रहे हैं।

इसे xval के साथ काम करने के लिए आपको दृश्य मॉडल गुणों पर डेटा एनाटेशन रखना होगा। जहां तक ​​मैं xvals कोड से बता सकता हूं, यह किसी भी सत्यापन जानकारी के लिए सार्वजनिक गुणों से परे नहीं दिखता है (अगर कोई गलत है तो कृपया मुझे सही करें)।

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

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