दिलचस्प पोस्ट
यूट्यूब एपीआई – निकालें वीडियो आईडी WinForms में मॉडल-दृश्य-प्रस्तुति PHP स्क्रिप्ट की बेंचमार्क दक्षता कैसे करें प्रोजेक्ट में कोई डिफ़ॉल्ट नहीं है। प्रॉपर्टी फाइल! एक सेट करने के लिए प्रोजेक्ट गुण संपादित करें Android में एक सेवा के माध्यम से जीपीएस स्थान प्राप्त करें psql: FATAL: उपयोगकर्ता प्रमाणीकरण उपयोगकर्ता "पोस्टग्रेज़" के लिए विफल हुआ आप पायथन में दो चर के लॉजिकल एक्सओर कैसे प्राप्त करते हैं? चेतावनी: "फ़ॉर्मेट स्ट्रिंग स्ट्रिंग और कोई प्रारूप तर्क नहीं" आईफ़ोन – UIView पर पारदर्शी आयत को देखने के लिए नीचे देखने के लिए जावास्क्रिप्ट के माध्यम से छवि का औसत रंग प्राप्त करें चरित्र पुनर्निर्माण और ओसीआर के लिए भरना PHP सरणियों को संग्रहीत करने के लिए पसंदीदा विधि (json_encode vs serialize) सी ++ कास्ट सिंटेक्स शैली किसी URL में रखने के लिए JSON स्ट्रिंग से बचने के लिए कैसे? जावा एम्बेडेड डेटाबेस तुलना

ASP.NET MVC 5 रेडियो बटन के समूह

मैं अपना पहला एएसपी.नेट एमवीसी प्रोजेक्ट शुरू कर रहा हूं, इसलिए मेरे पास एक सरल प्रश्न है। मेरे पास कोड है:

foreach(var question in Model.GeneralQuestions) { <div class = "well"> <h3> <strong>@question.QuestionString</strong> </h3> @foreach (var answer in question.PossibleAnswers) { @Html.RadioButtonFor(model => question.QuestionString, answer.Answer) @Html.Label(answer.Answer) <br /> } </div> } 

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

संपादित करें
मेरा मॉडल ऐसा दिखता है:

 public class StudentViewModel { public Student Student { get; set; } public List<Question> GeneralQuestions { get; set; } public List<SubjectQuestions> SubjectQuestions { get; set; } } public class Student { public int StudentID { get; set; } public string Index { get; set; } public string Name { get; set; } public string Surname { get; set; } public virtual ICollection<Subject> Subjects { get; set; } } public class Question { public int QuestionID { get; set; } public string QuestionString { get; set; } public bool IsAssociatedWithSubject { get; set; } public virtual ICollection<PossibleAnswer> PossibleAnswers { get; set; } public virtual ICollection<Results> Results { get; set; } } public class SubjectQuestions { public Subject Subject { get; set; } public List<Question> Questions { get; set; } } public class Results { public int ResultsID { get; set; } public int QuestionID { get; set; } public int? SubjectID { get; set; } public int PossibleAnswerID { get; set; } public virtual Question Question { get; set; } public virtual PossibleAnswer PossibleAnswer { get; set; } public virtual Subject Subject { get; set; } } 

StudentViewModel के एक उदाहरण में मैं एक छात्र और सभी सवालों का जवाब देना चाहता हूं (वह सामान्य और संबंधित विषयों से संबंधित है) और इसे देखने के लिए पास करें। दृश्य में मैं सभी प्रश्नों को एकल रूप में रखता हूं और वे सभी प्रकार के रेडियो हैं इसलिए, क्या कोई मुझे रेडियो बटन समूहबद्ध करने और इस फॉर्म को सही ढंग से पोस्ट करने में सहायता कर सकता है?

वेब के समाधान से एकत्रित समाधान "ASP.NET MVC 5 रेडियो बटन के समूह"

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

आपको प्रदर्शित करने के लिए दृश्य मॉडल बनाने की आवश्यकता होगी कि आप किस प्रदर्शन को प्रदर्शित करना और संपादित करना चाहते हैं और एक लूप (या एक EditorTemplate का उपयोग करके) में रेडियो बटन जनरेट कर सकते हैं ताकि इनके साथ ठीक से नामित किया जा सके।

मॉडल देखें

 public class QuestionVM { public int ID { get; set; } // for binding public string Text { get; set; } [Required] public int? SelectedAnswer { get; set; } // for binding public IEnumerable<AnswerVM> PossibleAnswers { get; set; } } public class SubjectVM { public int? ID { get; set; } [DisplayFormat(NullDisplayText = "General")] public string Name { get; set; } public List<QuestionVM> Questions { get; set; } } public class AnswerVM { public int ID { get; set; } public string Text { get; set; } } public class StudentVM { public int ID { get; set; } public string Name { get; set; } // plus any other properties of student that you want to display in the view public List<SubjectVM> Subjects { get; set; } } 

राय

 @model YourAssembly.StudentVM @using(Html.BeginForm()) { @Html.HiddenFor(m => m.ID) @Html.DisplayFor(m => m.Name) for(int i = 0; i < Model.Subjects.Count; i++) { @Html.HiddenFor(m => m.Subjects[i].ID) @Html.DisplayFor(m => m.Subjects[i].Name) // will display "General" if no name for (int j = 0; j < Model.Subjects[i].Questions.Count; j++) { @Html.HiddenFor(m => m.Subjects[i].Questions[j].ID) @Html.DisplayFor(m => m.Subjects[i].Questions[j].Text) foreach(var answer in Model.Subjects[i].Questions[j].PossibleAnswers ) { <div> @Html.RadioButtonFor(m => m.Subjects[i].Questions[j].SelectedAnswer, answer.ID, new { id = answer.ID}) <label for="@answer.ID">@answer.Text</label> </div> } @Html.ValidationMessageFor(m => m.Subjects[i].Questions[j].SelectedAnswer) } } <input type="submit" value="save" /> } 

नियंत्रक

 public ActionResult Edit(int ID) { StudentVM model = new StudentVM(); // populate your view model with values from the database return View(model); } [HttpPost] public ActionResult Edit(StudentVM model) { // save and redirect } 

नोट मैं अपने मॉडल द्वारा निरूपित डेटाबेस संरचना द्वारा थोड़ा भ्रमित हूँ (उदाहरण के लिए आपको Question और SubjectQuestion Question लिए अलग मॉडल की आवश्यकता क्यों है, जब SubjectID लिए एक null मान इसे "सामान्य" प्रश्न के रूप में पहचानता है)। मैं आपको सुझाव देता हूं कि GET विधि में कुछ मानों को कड़ी मेहनत से कोडित करके यह कैसे काम करता है और वापस पोस्ट करता है

 StudentVM model = new StudentVM(); model.ID = 1; model.Name = "bambiinela"; model.Subjects = new List<SubjectVM>() { new SubjectVM() { Questions = new List<QuestionVM>() { new QuestionVM() { ID = 1, Text = "Question 1", SelectedAnswer = ?, // set this if you want to preselect an option PossibleAnswers = new List<AnswerVM>() { new AnswerVM() { ID = 1, Text = "Answer A" }, new AnswerVM() { ID = 1, Text = "Answer B" } } }, new QuestionVM() { ID = 2, Text = "Question 2", PossibleAnswers = new List<AnswerVM>() { // similar to above } } } }, new SubjectVM() { ID = 1, Name = "Math", Questions = new List<QuestionVM>() { // similar to above } } }; 

जब आप पोस्ट करते हैं, मॉडल प्रत्येक विषय में प्रत्येक प्रश्न के लिए चयनित उत्तर की पहचान के साथ आबादी होती है। कुछ गुणों के लिए DisplayFor() का उपयोग नोट करें ये वापस नहीं पोस्ट करेंगे, यदि आप दृश्य वापस लौटाते हैं तो आपको इन गुणों को फिर से ModelState (जैसे ModelState वैध नहीं है)। वैकल्पिक रूप से आप केवल पढ़ने के लिए एक टेक्स्ट बॉक्स जनरेट कर सकते हैं या उन गुणों के लिए छुपा इनपुट जोड़ सकते हैं। मैं यह भी सुझाव देता हूं कि आप HTML का निरीक्षण करते हैं जो विशेष रूप से नाम विशेषताओं में उत्पन्न होता है जो कुछ ऐसा दिखेगा

 <input type="radio" name="Subjects[0].Questions[0].SelectedAnswer" ... 

आपको यह समझने के लिए कि कैसे वापस अपने मॉडल पर संग्रह वापस लाया गया है

चाल एक अभिव्यक्ति (पहले पैरामीटर को Html.RadioButtonFor) का उपयोग करने के लिए है जिसमें एक ऐसा मान शामिल है जो रेडियो-बटन के प्रति समूह बदलता है। आपके मामले में, यह प्रश्नों की सूची में एक सूचकांक होगा।

यहां कुछ नमूना कोड है:

  @for (int i = 0; i < Model.GeneralQuestions.Count; i++) { var question = Model.GeneralQuestions[i]; @Html.Label(question.QuestionString) <br /> foreach (var answer in question.PossibleAnswers) { @Html.RadioButtonFor(model => Model.GeneralQuestions[i].SelectedAnswerId, answer.Id) @Html.Label(answer.Answer) <br /> } } 

यह निम्न HTML का उत्पादन करता है:

 <label for="Q1">Q1</label> <br /> <input id="GeneralQuestions_0__SelectedAnswerId" name="GeneralQuestions[0].SelectedAnswerId" type="radio" value="1" /> <label for="A01">A01</label> <br /> <input id="GeneralQuestions_0__SelectedAnswerId" name="GeneralQuestions[0].SelectedAnswerId" type="radio" value="2" /> <label for="A02">A02</label> <br /> <label for="Q2">Q2</label> <br /> <input id="GeneralQuestions_1__SelectedAnswerId" name="GeneralQuestions[1].SelectedAnswerId" type="radio" value="11" /> <label for="A11">A11</label> <br /> <input id="GeneralQuestions_1__SelectedAnswerId" name="GeneralQuestions[1].SelectedAnswerId" type="radio" value="12" /> <label for="A12">A12</label> <br /> 

और पूर्णता के लिए, यहां इस्तेमाल किए गए मॉडल का एक छोटा संस्करण है:

 public class StudentViewModel { public List<Question> GeneralQuestions { get; set; } } public class Question { public int QuestionId { get; set; } public string QuestionString { get; set; } public ICollection<PossibleAnswer> PossibleAnswers { get; set; } public int SelectedAnswerId { get; set; } } public class PossibleAnswer { public int Id { get; set; } public string Answer { get; set; } } 

और यहां क्रिया विधि से कोड है:

 return View(new StudentViewModel { GeneralQuestions = new List<Question> { new Question { QuestionString = "Q1", PossibleAnswers = new[] { new PossibleAnswer {Id = 1, Answer = "A01"}, new PossibleAnswer {Id = 2, Answer = "A02"} } }, new Question { QuestionString = "Q2", PossibleAnswers = new[] { new PossibleAnswer {Id = 11, Answer = "A11"}, new PossibleAnswer {Id = 12, Answer = "A12"} } }, } });