2016-08-17 10 views
0

私のasp.netプロジェクトの間にあり、非常に基本的なことに固執しますが、悲しいことにオンラインブログから多くの助けを得ることはできませんでした。複数のテーブルのデータ入力フォームmvc

私は4つのテーブルを持っていた学生、コース、部、応用。私は学生がオンラインでコースに申し込むためのフォームをデザインしています。

生徒は名前、姓、連絡先など のようなすべての個人的な詳細を入力します。その後、ドロップダウンリストから学生がDepartmentを選択します。科目の選択に応じて、コースのドロップダウンリストの中に表示されます。

このフォームに入力したデータは保存できません。私はこれらのドロップダウンリストで何か間違っています。私がドロップダウンリストから部署を選択するときに学生の個人情報を記入した後、個人情報はすべて消去されます。以下は私のコードです。

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クラス:

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"); 
     } 

    } 

ビューコーディング:

@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> 
+1

エラーは、ビューの剃刀/ HTMLコードにある可能性が高いので投稿することができれば助かります – ADyson

+0

ビューコードも今投稿されています –

+0

質問を編集する必要があります。答えとして投稿しないでください:-)しかし、私は一見を持っています – ADyson

答えて

0

<input type="submit" value="Select" />を私が考える問題です。私はあなたが部署を選んだときにこれを押すと思いますか?それはフォーム全体を送信し、データを保存します。その後、同じビューの空白のバージョンに戻ります。

最初にボタンを削除する必要があります。次に、Departmentドロップダウンリストの "change"イベントを処理するjavascriptが必要です。そのコードは、選択された部門のIDを渡して、サーバーにajax要求を行います。サーバー上で、Department IDを受け入れる新しいアクションメソッドを定義し、そのDepartmentに関連付けられているコースのリストを含むJsonResultを返します。それはajax呼び出しによってページに戻され、javascriptはそれを読み取り、「コース」ドロップダウンリストに結果を再入力します。

この回答には詳細情報が必要な場合のチュートリアルが含まれています。 Easiest way to create a cascade dropdown in ASP.NET MVC 3 with C#https://www.google.co.uk/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#safe=active&q=mvc+cascading+dropdownlist

+0

困った部分を指摘するためにありがとうたくさん。これらのリンクは役立ちます。 –

+0

問題ありません。答えがあなたを助けてくれた場合はアップヴォートしてください。 – ADyson

関連する問題