c# - HttpPost बनाएँ कार्रवाई पद्धति के भीतर से चयनित चेकबॉक्स कैसे जानें?



asp.net-mvc asp.net-core (1)

आप ऐसा करने के लिए एडिटर टेम्प्लेट का उपयोग कर सकते हैं।

सबसे पहले, पाठ्यक्रम चयन के लिए एक नई कक्षा बनाएं और उस कक्षा का संग्रह करने के लिए अपने दृश्य मॉडल को अपडेट करें।

public class SelectedCourse
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsSelected { get; set; }
}

public class StudentCourseVM
{
    public int StudentId { set; get; }       
    public IEnumerable<SelectedCourse> SelectedCourses { get; set; }
}

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

अब अपने ~/Views/YourControllerName और EditorTemplates नामक एक निर्देशिका बनाएं। वहां एक नई रेजर फाइल बनाएं और सेलेक्टर्स सोर्स नाम दें

इस कोड को नई फ़ाइल में पेस्ट करें

@model SelectedCourse
<label>@Model.Name</label>
<input asp-for="IsSelected"/>
<input type="hidden" asp-for="Id" />

अब अपने GET एक्शन में, व्यू मॉडल का एक ऑब्जेक्ट बनाएं, SelectCourses कलेक्शन को लोड करें और इसे व्यू पर भेजें।

public IActionResult Create()
{
    // I hard coded the student id and the courses here.
    // you may replace it with real data.
    var vm = new StudentCourseVM { StudentId = 12 }; 
    //Assuming we are assigning courses to the student with id 12
    vm.SelectedCourses = new List<SelectedCourse>()
    {
        new SelectedCourse {Id = 1, Name = "CSS"},
        new SelectedCourse {Id = 2, Name = "Swift"},
        new SelectedCourse {Id = 3, Name = "IOS"},
        new SelectedCourse {Id = 4, Name = "Java"}
    };
    return View(vm);
}

अब आपके मुख्य दृश्य में ( Create.cshtml ) जो कि StudentCourseVM, दृढ़ता से टाइप करें, EditorFor प्रॉपर्टी पर EditorFor हेल्पर विधि का उपयोग करें।

@model StudentCourseVM
<form asp-action="Create">   
    @Html.EditorFor(f=>f.SelectedCourses)
    <input type="hidden" asp-for="StudentId"/>
    <input type="submit"/>
</form>

संपादक टेम्पलेट चयनित आइटम संग्रह के प्रत्येक आइटम के लिए संपादक टेम्पलेट फ़ाइल में कोड निष्पादित करेगा। तो आपके पास उपयोगकर्ता के लिए पाठ्यक्रम का नाम और एक चेकबॉक्स दिखाई देगा।

अपने HttpPost एक्शन विधि में, आप पैरामीटर के समान दृश्य मॉडल का उपयोग कर सकते हैं। जब फ़ॉर्म सबमिट किया जाता है, तो आप SelectedCourses मदों में आइटम के माध्यम से लूप कर सकते हैं संपत्ति की जांच की गई संपत्ति का मूल्य देखें। यूआई में चुने गए पाठ्यक्रमों का उपयोगकर्ता के पास true मूल्य होगा।

[HttpPost]
public IActionResult Create(StudentCourseVM model)
{
    var studentId = model.StudentId; 
    foreach (var modelSelectedCourse in model.SelectedCourses)
    {
        if (modelSelectedCourse.IsSelected)
        {
            //this one is selected. Save to db
        }
    }
    // to do : Return something
}

पृष्ठ लोड पर कुछ चेकबॉक्स को पूर्व-चयन करना

कभी-कभी आप पृष्ठ लोड होने पर कुछ चेकबॉक्स का चयन करना चाहते हैं (उदाहरण के लिए: अपनी संपादित स्क्रीन के लिए आप पहले से सहेजे गए पाठ्यक्रमों को जाँच के रूप में दिखाना चाहते हैं)। ऐसा करने के लिए, आपको बस अपने GET एक्शन मेथड में संबंधित IsSelected ऑब्जेक्ट की IsSelected संपत्ति को सेट करने की आवश्यकता है।

public IActionResult Edit(int id)
{
    // I hard coded the student id and the courses here.
    // you may replace it with real data.
    var vm = new StudentCourseVM { StudentId = id }; 
    //Assuming we are assigning courses to the student with id 12
    vm.SelectedCourses = new List<SelectedCourse>()
    {
        new SelectedCourse {Id = 1, Name = "CSS"},
        new SelectedCourse {Id = 2, Name = "Swift", IsSelected = true },
        new SelectedCourse {Id = 3, Name = "IOS", IsSelected = true },
        new SelectedCourse {Id = 4, Name = "Java"}
    };
    return View(vm);
}

उपरोक्त कोड स्विफ्ट और IOS के लिए चेकबॉक्स का चयन करेगा।

Student और Course बीच मेरे कई-कई रिश्ते हैं। लिंकिंग एंटिटी सेट Enrollment । सादगी के लिए, वे सभी निम्नानुसार परिभाषित किए गए हैं।

मॉडल

public class Course
{
    public int Id { get; set; }
    public string Title { get; set; }

    public virtual ICollection<Enrollment> Enrollments { get; set; }
}

public class Enrollment
{
    public int Id { get; set; }
    public int StudentId { get; set; }
    public int CourseId { get; set; }

    public virtual Student Student { get; set; }
    public virtual Course Course { get; set; }
}

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Enrollment> Enrollments { get; set; }
}

ViewModels

public class StudentCourseVM
{
    public Student Student { get; set; }
    public IEnumerable<Course> SelectedCourses { get; set; }
    public IEnumerable<Course> AvailableCourses { get; set; }
}

नियंत्रकों

    public IActionResult Create()
    {
        var availableCourses = context.Courses;
        return View(new StudentCourseVM { AvailableCourses = availableCourses });
    }


    [HttpPost]
    public async Task<IActionResult> Create(StudentCourseVM sc)
    {
        if (ModelState.IsValid)
        {
            // What should I do here?
            // ======================
            await context.SaveChangesAsync();
            return RedirectToAction("Index");
        }
        return View(sc);
    }

दृश्य

@model MasterDetails.ViewModels.StudentCourseVM
<form asp-action="Create">
    <div>
        <label asp-for="@Model.Student.Name"></label>
        <input asp-for="@Model.Student.Name" />
    </div>
    <div>
        <label asp-for="@Model.Student.Enrollments"></label><br />
        @foreach (var course in Model.AvailableCourses)
        {
            <input type="checkbox" name="@course.Title" id="@course.Id" /> @course.Title <br />
        }
    </div>
    <input type="submit" value="Create" />
</form>

प्रशन

HttpPost Create कार्रवाई पद्धति के भीतर से चयनित चेक बॉक्स कैसे जानें?





tag-helpers