2013-05-15 8 views
5

मैंने आंशिक दृश्य बनाया है (भले ही संपादक टेम्पलेट), मैं दृश्य में एक उप मॉडल पास करता हूं, हालांकि, जब मैंने "सबमिट" पर क्लिक किया, तो मुझे हमेशा आंशिक से "शून्य" मिलता है राय। मैं उप मॉडल को छोड़कर मुख्य मॉडल के गुण मान प्राप्त कर सकता हूं।आंशिक दृश्य समस्या से वापसी मॉडल

मुख्य मॉडल

public class PetModel 
{ 
    public string name {get; set;} 
    public long SpeciesID {get; set;} 
    public long BreedID {get; set;} 
    public Calendar DOB {get; set;} 
} 

उप मॉडल

public class Calendar 
{ 
    public string Year{get; set;} 
    public string Month{get; set;} 
    public string Day{get; set;} 
} 

मुख्य देखें

@model Application.Models.PetModel 
    @using (Html.BeginForm("CatchPetContent", "Quote",Model)) 
    { 
    @Html.TextBoxFor(x => x.Name) 
    @Html.DropDownListFor(x=>x.SpeciesID,new List<SelectListItem>(),"select") 
    @Html.DropDownListFor(x=>x.BreedID,new List<SelectListItem>(),"select") 
    @Html.EditorFor(Model => x.DOB) 
    <input type="submit" value="submit" /> 
    } 

संपादक टेम्पलेट

@model Application.Models.Calendar 
@Html.DropDownListFor(Model => Model.Day, new List<SelectListItem>()) 
@Html.DropDownListFor(Model => Model.Month,new List<SelectListItem>()) 
@Html.DropDownListFor(Model => Model.Year, new List<SelectListItem>()) 

"CatchPetContent" कार्रवाई

[HttpPost] 
public ActionResult CatchPetContent(PetModel Model) 
{ 


     PetModel pet = new PetModel(); 
     pet.Name = Model.Name; 
     pet.SpeciesID = Model.SpeciesID; 
     pet.BreedID = Model.BreedID; 
     pet.DOB = Model.DOB;// always null 

     RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary(); 
     redirectTargetDictionary.Add("Controller", "Home"); 
     redirectTargetDictionary.Add("Action", "Index"); 

     return new RedirectToRouteResult(new RouteValueDictionary(redirectTargetDictionary)); 

} 

जब मैंने इसे डिबग, "Model.DOB" हमेशा रिक्त है

उत्तर

5

आप एक के रूप में उप-संपत्ति जोड़ना चाहिए आपकी कार्रवाई पर अतिरिक्त पैरामीटर:

[HttpPost] 
public ActionResult CatchPetContent(PetModel Model, Calendar Bob) 
{  
    ** snip ** 
} 

डिफ़ॉल्ट मॉडलबिंडर ऑब्जेक्ट्स को घोंसला नहीं करता है। हालांकि यदि आप इसे दूसरे पैरामीटर के रूप में शामिल करते हैं तो यह मानों को पाता है।

यदि आप उन्हें घोंसला करना चाहते हैं, तो आपको अपना खुद का मॉडलबिंडर बनाना होगा। List count empty when passing from view to model in ASP.Net MVC

0

डिफ़ॉल्ट मॉडल बांधने की मशीन नेस्टेड वस्तुओं के लिए बाध्य होगा, तो आप इस परिदृश्य के लिए अपने स्वयं के मॉडल बांधने की मशीन बनाने की जरूरत नहीं है:

निम्नलिखित प्रश्न ने वही समस्या थी।

देखें: http://lostechies.com/jimmybogard/2011/09/07/building-forms-for-deep-view-model-graphs-in-asp-net-mvc/ और एसओ DefaultModelBinder not binding nested model

मुझे लगता है आपके समस्या यह है कि अपने संपादक टेम्पलेट पोस्ट के माध्यम से कुछ भी नहीं लौटा रहा है वापस तो नेस्टेड वस्तु मान शून्य होगा पर। अपने संपादक टेम्पलेट में लाइनों:

@Html.DropDownListFor(Model => Model.Day, new List<SelectListItem>()) 
@Html.DropDownListFor(Model => Model.Month,new List<SelectListItem>()) 
@Html.DropDownListFor(Model => Model.Year, new List<SelectListItem>()) 

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

@Html.TextBoxFor(Model => Model.Day) 
@Html.TextBoxFor(Model => Model.Month) 
@Html.TextBoxFor(Model => Model.Year) 

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

+0

आप सही हैं, लेकिन मैंने प्रत्येक ड्रॉपडाउन के लिए प्रारंभिक विधि जोड़ दी है, और मुझे अभी भी शून्य नहीं मिला है। "सबमिट" पर क्लिक करने से पहले, मैंने ड्रॉपडाउन से मूल्यों का चयन किया है, हालांकि, सबमिट बटन पर क्लिक करने के बाद, घोंसला मॉडल "कैलेंडर" को "शून्य" के साथ असाइन किया जाएगा। मैंने डिफॉल्टबिल्डर में "SetProperty" विधि को डीबग किया है, ऑब्जेक्ट का मान हमेशा शून्य है – user2376512

+0

फिडलर के साथ आइटम्स के मानों का निरीक्षण करने का प्रयास करें ताकि यह देखने के लिए कि फ़ॉर्म मान वास्तव में सर्वर पर वापस भेजे जा रहे हैं। एचटीएमएल साल के समान दिखता है, मॉडल बाध्य होने के लिए इसे डीओबी जैसे नाम होना चाहिए। प्रिय, अगर ऐसा नहीं होता तो यह बाध्य नहीं होगा। –

+0

फिडलर से मैं नीचे स्ट्रिंग पा सकता हूं नाम = test & SpeciesID = 2 और BreedID = 7 और DOB.Day = 23 और DOB.Month = 05 और DOB.Year = 2010 – user2376512

0

बजाय

@Html.EditorFor(Model => x.DOB) 

कोशिश आंशिक दृश्य

@Html.Partial("partialViewName", Model.DOB) 
+0

मैंने इसे पहले ही कोशिश की है, यह अभी भी एक ही समस्या है। – user2376512

0

मैं आपके मुख्य दृश्य में लगता है कि प्रस्तुत करना आप गलत वर्तनी, ऐसा लगता है कि आप

@Html.EditorFor(Model => x.DOB) 

में बदल जानी चाहिए है
@Html.EditorFor(x => x.DOB) 
संबंधित मुद्दे