0

I am in between my asp.net project and get stuck on very basic thing but sadly could not get much help from online blogs.

I got 4 tables Student, Course, Department, Applied. I am designing a form for students to apply for course online.

Student will put all his personal detail like name, surname, contact details etc after that from a dropdown list student will select Department. According to the selection of Department purticular courses will be shown inside course dropdown list.

i am not able to save data entered in this form. i am doing something wrong with these drop down list. After filling in student personal details when i choose the department from drop down list all the personal details wiped out. Following is my code.

public class Student
{
    public int StudentID { get; set; }        
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime DateOfBirth { get; set; }
    public string Address { get; set; }
    public double PhoneNumber { get; set; }
    public string Email { get; set; }
    public DateTime AppliedDate { get; set; }
    public virtual ICollection<Applied> Applications { get; set; }
}

public class Course
{
    public int CourseID { get; set; }       //PK

    public int DepartmentID { get; set; }   //FK
    public string CourseName { get; set; }
    public string CoursCode { get; set; }
    public int NfqLevel { get; set; }
    public int CreditHrs { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime FinishDate { get; set; }

    public virtual Department Department { get; set; }
    public virtual ICollection<Applied> Applications { get; set; }       
}

public class Department
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int DepartmentID { get; set; }       //PK
    public string DpName { get; set; }
    public virtual ICollection<Course> Courses { get; set; }
}

public enum Status { Applied, Approved, Rejected }

public class Applied
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int AppliedID { get; set; }
    public int StudentID { get; set; }      //FK
    public int CourseID { get; set; }       //FK

    public Status? ApplicationStatus { get; set; }

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

public class Enrolment
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int EnrolmentID { get; set; }        //PK

    public int AppliedID { get; set; }          //FK
    public int TotalFee { get; set; }
    public int FeeReceived { get; set; }
    public int BalFee { get; set; }

    public virtual Applied Application { get; set; }

}

ViewModel Class:

public class Application2
{
    public int StudentID { get; set; }       

    public string FirstName { get; set; }

    public string LastName { get; set; }

    [DataType(DataType.Date)]
    public DateTime DateOfBirth { get; set; }

    public string Address { get; set; }

    [DataType(DataType.PhoneNumber)]
    public double PhoneNumber { get; set; }

    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }

    [DataType(DataType.Date)]
    public DateTime AppliedDate { get; set; }

    public int AppliedID { get; set; }

    public int CourseID { get; set; }       

    public string CourseName { get; set; }

    public string DpName { get; set; }
}



public class ApplicationController : Controller
{
    private RegistrarsContext db = new RegistrarsContext();

    //GET: StudentApplication
    public ActionResult Index(int? SelectedDepartment, int? SelectedCourse)
    {

        {
            var departments = db.Departments.OrderBy(q => q.DpName).ToList();

            ViewBag.SelectedDepartment = new SelectList(departments, "DepartmentID", "DpName", SelectedDepartment); 


            int departmentID = SelectedDepartment.GetValueOrDefault();

            IQueryable<Course> courses = db.Courses
                .Where(c => !SelectedDepartment.HasValue || c.DepartmentID == departmentID)
                .OrderBy(d => d.CourseID)
                .Include(d => d.Department);

            ViewBag.SelectedCourse = new SelectList(courses, "CourseID", "CourseName");

        }
        return View();
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Application2 application)
    {
       var student = new Student {StudentID=application.StudentID, FirstName=application.FirstName, LastName=application.LastName, DateOfBirth=application.DateOfBirth, Address=application.Address, PhoneNumber=application.PhoneNumber, Email=application.Email };

            var apply = new Applied {AppliedID=application.AppliedID, CourseID=application.CourseID, StudentID=application.StudentID  };

        using (var db = new RegistrarsContext())
        {
            db.Students.Add(student);
            db.Applied.Add(apply);
            db.SaveChanges();
            return View("Index");
        }

    }

View Coding:

@model StudentsRegistration.ViewModels.Application

@{
    ViewBag.Title = "Student Appication";
}

<h2>Student Application Form</h2>


@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Student Details </h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })


        <div class="form-group">
            @Html.LabelFor(model => model.StudentID, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.StudentID, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.StudentID, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.FirstName)
                @Html.ValidationMessageFor(model => model.StudentID)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.LastName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.LastName)
                @Html.ValidationMessageFor(model => model.LastName)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.DateOfBirth, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.DateOfBirth)
                @Html.ValidationMessageFor(model => model.DateOfBirth)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Address, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Address)
                @Html.ValidationMessageFor(model => model.Address)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.PhoneNumber, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.PhoneNumber)
                @Html.ValidationMessageFor(model => model.PhoneNumber)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Email)
                @Html.ValidationMessageFor(model => model.Email)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.AppliedDate, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.AppliedDate)
                @Html.ValidationMessageFor(model => model.AppliedDate)
            </div>
        </div>
        <br>
        <br>

        <div class="form-group" ,>
            Select Department:


            @Html.DropDownList("SelectedDepartment", "Select Department")
            <input type="submit" value="Select" />

        </div>

        <div class="form-group">

            Select Course:

            @Html.DropDownList("SelectedCourse", "Select Course")

        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Submit" class="btn btn-default" />
            </div>
        </div>

    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>
ekad
  • 14,436
  • 26
  • 44
  • 46

1 Answers1

0

<input type="submit" value="Select" /> is the problem I think. I assume you press this when you've selected a department? That will submit the entire form and save the data. Then it will return you to a blank version of the same view.

What you need to is to get rid of the button first. Then you need some javascript which will handle the "change" event on your Department dropdown list. That code would then make an ajax request to the server, passing in the ID of the department selected. On the server, you define a new action method, which accepts a Department ID, and returns a JsonResult containing the list of courses which are associated with the department. That gets returned to the page via the ajax call, and the javascript reads it and re-populates the Courses dropdown list with the result.

This answer contains a good tutorial if you need more info. Easiest way to create a cascade dropdown in ASP.NET MVC 3 with C# . There are plenty of others here: https://www.google.co.uk/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#safe=active&q=mvc+cascading+dropdownlist

Community
  • 1
  • 1
ADyson
  • 57,178
  • 14
  • 51
  • 63