2010-01-22 2 views
5

मैं एक ViewModel (इस प्रश्न के लिए और अन्य अप्रासंगिक बातें) एक शब्दकोश युक्त वर्ग के लिए मॉडल बांधने की मशीन:ASP.NET MVC 1.0 - शब्दकोश

public class MyViewModel { 
    public Dictionary<int, string> Data { get; set; } 
    /* ... */ 
} 

तब मैं GET/POST कार्यों की एक जोड़ी है शब्दकोश के साथ सौदा है। GET कार्रवाई पहले डेटाबेस से कुछ डेटा के साथ Dictionary<int, string> भर जाएगा, और फिर वापस जाने के एक View:

  • .Key रों छुपी फ़ील्ड पर होगा; और उपयोगकर्ता को संपादित करने के लिए
  • .Value एस textareas पर होगा।

उपयोगकर्ता इस फॉर्म को सबमिट करेगा, POST कार्रवाई को कॉल करेगा। यह इनपुट को संसाधित करने का प्रयास करेगा (प्रक्रिया अप्रासंगिक है)। Key/Value जोड़े मान्य होंगे, कुछ अमान्य होंगे।

अमान्य जोड़े होते हैं, तो POST कार्रवाई तो एक ViewModel फिर से संगठित होगा, लेकिन इस बार शब्दकोश केवल अमान्य जोड़े को शामिल करना चाहिए, और उपयोगकर्ता के लिए एक ही दृश्य पुन: प्रदर्शित ठीक करने और प्रविष्ट करने का प्रयास करने के लिए होगा ।

प्रश्न: यह प्राप्त करने के लिए सबसे आसान तरीका & क्या है?

क्या मैं अब तक किया है (ठीक काम कर रहा), नियंत्रक में:

public ActionResult MyAction(MyViewModel vm) { 
    /* Process data */ 
    if (are there invalid pairs?) { 
     var vmErrors = new MyViewModel(); 
     /* ... fill the ViewModel ... */ 
     vmErrors.Data = 
      vm.Data 
       .Where(x => IsInvalid(x)) 
       .ToDictionary(x => x.Key, x => x.Value); 
     return View(vmErrors); 
    } 
} 

और दृश्य:

<% var i = 0; foreach (var p in Model.Data) { %> 
    <%= Html.Hidden("vm.Data[" + i + "].key", vm.Key %> 
    <%= Html.TextArea("vm.Data[" + i + "].value", vm.Value %> 
<% i++; } %> 

समस्या यह है कि मॉडल बांधने की मशीन खुश करने के लिए है मैं उसे नाम देना होगा अनुक्रमिक आईडी के साथ दृश्य पर मेरे क्षेत्र। लेकिन मुझे कुंजी/मूल्य जोड़े निकालने के लिए शब्दकोश को फिर से शुरू करना होगा, इसलिए यह for (var i = 0; i < Model.Data.Count; i++) {...} लूप नहीं हो सकता है।

+0

क्या आप एएसपी.नेट एमवीसी 1.0 या एमवीसी 2 का उपयोग कर रहे हैं? संग्रह और शब्दकोशों का मॉडल बाध्यकारी एमवीसी 2 में काफी सुधार हुआ था। – Eilon

+0

@ एइलॉन: एएसपी.नेट एमवीसी 1.0, और इसे चिपके रहना चाहिए। –

उत्तर

1

समाधान इस आलेख में वर्णित किया गया है - Dictionary Model Binder in ASP.NET MVC2 and MVC3

कोड सामान्य प्रयोजन है और MVC 1 भी साथ प्रयोग किया जा सकता है।

+0

यह दयालु है कि किसी ने भी एक वर्ष का जवाब नहीं दिया। :( –