2016-08-30 141 views
0

我试图从学生注册表格中插入数据到数据库中。进入学生表的数据和进入应用表的数据的一部分。输入进入STUDENT表的数据以及从APPLIED表中下拉列表中选择的课程。我无法从选定的课程中取得CourseID。通过选择下拉列表将数据插入数据库

问题是在该代码中的控制器:

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

在调试模式下它没有显示在CourseID任何数据。

以下是我的代码。

视图模型:

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

    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 int AppliedID { get; set; }  //PK 

    public int CourseID { get; set; }  //FK 

} 

控制器:

public ActionResult Index() 
{ 
    return View(); 
} 

public ActionResult DepartmentList() 
{ 
    var departments = db.Departments.OrderBy(x => x.DpName).ToList(); 

    if (HttpContext.Request.IsAjaxRequest()) 
    { 
     return Json(new SelectList(
        departments, 
        "DepartmentID", 
        "DpName"), JsonRequestBehavior.AllowGet 
        ); 
    } 

    return View(departments); 
} 

public ActionResult CourseList(int DepartmentID) 
{ 
    var courses = db.Courses.Where(x => x.DepartmentID == DepartmentID).ToList(); 

    if (HttpContext.Request.IsAjaxRequest()) 
     return Json(new SelectList(courses, "CourseID", "CourseName"), JsonRequestBehavior.AllowGet); 

    return View(courses); 
} 


[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, AppliedDate = application.AppliedDate }; 

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

    if (ModelState.IsValid) 
    { 
     using (var db = new RegistrarsContext()) 


      db.Students.Add(student); 

      db.Applied.Add(apply).ApplicationStatus = Status.Applied; 

      db.SaveChanges(); 
      return RedirectToAction("Index", "Student"); 
    } 

    return View(); 
} 

以下是VIEW:

@model StudentsRegistration.ViewModels.Application2 

@{ 
    ViewBag.Title = "Student Appication"; 
    Layout = "~/Views/Shared/_Layout2.cshtml"; 
} 
<h2>Student Application Form</h2> 

@using (Html.BeginForm("Create", "Application2", FormMethod.Post)) 
{ 
    @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"> 

      <label for="Departments">Departments</label> 
      <select id="Departments" name="Departments"></select> 
      <br /><br /> 

     </div> 

     <div class="form-group"> 

      <label for="Courses">Courses</label> 
      <select id="Courses" name="Courses"></select> 

     </div> 

     @section scripts { 
      <script type="text/javascript"> 
     $(function() { 
      $.getJSON("/Application2/Departments/List", function (data) { 
       var items = "<option>---------------------</option>"; 
       $.each(data, function (i, country) { 
        items += "<option value='" + country.Value + "'>" + country.Text + "</option>"; 
       }); 
       $("#Departments").html(items); 
      }); 

      $("#Departments").change(function() { 
       $.getJSON("@Url.Action("CourseList", "Application2")?DepartmentID=" + $("#Departments").val(), function (data) { 
        var items = "<option>---------------------</option>"; 
        $.each(data, function (i, state) { 
         items += "<option value='" + state.Value + "'>" + state.Text + "</option>"; 
        }); 
        $("#Courses").html(items); 
       }); 
      }); 
     }); 
      </script> 
     } 
      <br /><br /> 
     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Create" class="btn btn-default" /> 
      </div> 
     </div>   
    </div> 
} 
<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 
+0

请发表您的视图代码也 – Vijai

+0

这一段代码不在视图中。我应该包括这个。你能解释一下吗? –

+0

不,它仍然没有传递任何值:var apply = new Applied {S​​tudentID = application.StudentID,CourseID = application.CourseID}; –

回答

0

下面是创建表的脚本:

USE [Breaz] 
GO 
/****** Object: Table [dbo].[Applied] Script Date: 9/6/2016 2:13:55 PM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[Applied](
    [AppliedId] [int] IDENTITY(1,1) NOT NULL, 
    [StudentId] [int] NOT NULL, 
    [CourseId] [int] NOT NULL, 
CONSTRAINT [PK_Applied] PRIMARY KEY CLUSTERED 
(
    [AppliedId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 
/****** Object: Table [dbo].[CourseDepartment] Script Date: 9/6/2016 2:13:55 PM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[CourseDepartment](
    [CourseDepartmentId] [int] IDENTITY(1,1) NOT NULL, 
    [CourseId] [int] NOT NULL, 
    [DepartmentId] [int] NOT NULL, 
CONSTRAINT [PK_CourseDepartment] PRIMARY KEY CLUSTERED 
(
    [CourseDepartmentId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 
/****** Object: Table [dbo].[Courses] Script Date: 9/6/2016 2:13:55 PM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
CREATE TABLE [dbo].[Courses](
    [CourseId] [int] IDENTITY(1,1) NOT NULL, 
    [CourseName] [varchar](10) NOT NULL, 
CONSTRAINT [PK_Courses] PRIMARY KEY CLUSTERED 
(
    [CourseId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 
SET ANSI_PADDING OFF 
GO 
/****** Object: Table [dbo].[Department] Script Date: 9/6/2016 2:13:55 PM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
CREATE TABLE [dbo].[Department](
    [DepartmentId] [int] IDENTITY(1,1) NOT NULL, 
    [DepartmentName] [varchar](10) NOT NULL, 
CONSTRAINT [PK_Department] PRIMARY KEY CLUSTERED 
(
    [DepartmentId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 
SET ANSI_PADDING OFF 
GO 
/****** Object: Table [dbo].[Student] Script Date: 9/6/2016 2:13:55 PM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
CREATE TABLE [dbo].[Student](
    [StudentId] [int] IDENTITY(1,1) NOT NULL, 
    [FirstName] [varchar](10) NULL, 
    [LastName] [varchar](10) NULL, 
    [DateOfBirth] [datetime] NULL, 
    [Address] [varchar](10) NULL, 
    [PhoneNumber] [varchar](10) NULL, 
    [Email] [varchar](10) NULL, 
    [AppliedDate] [varchar](10) NULL, 
CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED 
(
    [StudentId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 
SET ANSI_PADDING OFF 
GO 
ALTER TABLE [dbo].[Applied] WITH CHECK ADD CONSTRAINT [FK_Applied_Courses] FOREIGN KEY([CourseId]) 
REFERENCES [dbo].[Courses] ([CourseId]) 
GO 
ALTER TABLE [dbo].[Applied] CHECK CONSTRAINT [FK_Applied_Courses] 
GO 
ALTER TABLE [dbo].[Applied] WITH CHECK ADD CONSTRAINT [FK_Applied_Student] FOREIGN KEY([StudentId]) 
REFERENCES [dbo].[Student] ([StudentId]) 
GO 
ALTER TABLE [dbo].[Applied] CHECK CONSTRAINT [FK_Applied_Student] 
GO 
ALTER TABLE [dbo].[CourseDepartment] WITH CHECK ADD CONSTRAINT [FK_CourseDepartment_Courses] FOREIGN KEY([CourseId]) 
REFERENCES [dbo].[Courses] ([CourseId]) 
GO 
ALTER TABLE [dbo].[CourseDepartment] CHECK CONSTRAINT [FK_CourseDepartment_Courses] 
GO 
ALTER TABLE [dbo].[CourseDepartment] WITH CHECK ADD CONSTRAINT [FK_CourseDepartment_Department] FOREIGN KEY([DepartmentId]) 
REFERENCES [dbo].[Department] ([DepartmentId]) 
GO 
ALTER TABLE [dbo].[CourseDepartment] CHECK CONSTRAINT [FK_CourseDepartment_Department] 
GO 

使用EDMX生成的模型加上这样的观点:

namespace Testy2.Models 
{ 
    public class StudentView 
    { 
     public Student student { get; set; } 
     public Applied applied { get; set; } 
    } 
} 

这里是控制器:

public class Application2Controller : Controller 
{ 
    // 
    // GET: /Application2/ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult DepartmentList() 
    { 
     var departments = new List<Department>(); 
     using (var db = new Registrars()) 
     { 
      departments = db.Departments.OrderBy(x => x.DepartmentName).ToList(); 
      if (HttpContext.Request.IsAjaxRequest()) 
      { 
       return Json(new SelectList(
          departments, 
          "DepartmentID", 
          "DepartmentName"), JsonRequestBehavior.AllowGet 
          ); 
      } 
     } 
     return View(departments); 
    } 

    public ActionResult CourseList(int DepartmentID) 
    { 
     using (var db = new Registrars()) 
     { 
      var courses = db.CourseDepartments.Where(x => x.DepartmentId == DepartmentID).Select(
       p => new { CourseId = p.CourseId, CourseName = p.Cours.CourseName }).ToList(); 
      if (HttpContext.Request.IsAjaxRequest()) 
       return Json(new SelectList(courses, "CourseID", "CourseName"), JsonRequestBehavior.AllowGet); 
      return View(courses); 
     } 
    } 


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

     var apply = new Applied 
     { 
      StudentId = application.student.StudentId, 
      CourseId = application.applied.CourseId 
     }; 

     if (ModelState.IsValid) 
     { 
      using (var db = new Registrars()) 
      { 
       db.Students.Add(student); 
       db.Applieds.Add(apply); 

       db.SaveChanges(); 
       return RedirectToAction("Index", "Application2"); 
      } 
     } 
     return View(); 
    } 

} 

这里是视图:

@model Testy2.Models.StudentView 

@{ 
    ViewBag.Title = "Student Appication"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
<h2>Student Application Form</h2> 

@using (Html.BeginForm("Create", "Application2", FormMethod.Post)) 
{ 
    @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.student.StudentId, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.student.StudentId, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.student.StudentId, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

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

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

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

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

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

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

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

      <label for="Departments">Departments</label> 
      <select id="Departments" name="Departments"></select> 
      <br /><br /> 

     </div> 

     <div class="form-group"> 
      <label for="applied_CourseId">Courses</label> 
      @Html.DropDownListFor(m => m.applied.CourseId, new SelectList(new List<string>()), new { id = "applied_CourseId" }) 
     </div> 

     @section scripts { 
      <script type="text/javascript"> 
       $(function() { 
        $.getJSON("/Application2/DepartmentList", function (data) { 
         var items = "<option>---------------------</option>"; 
         $.each(data, function (i, country) { 
          items += "<option value='" + country.Value + "'>" + country.Text + "</option>"; 
         }); 
         $("#Departments").html(items); 
        }); 

        $("#Departments").change(function() { 
         $.getJSON("@Url.Action("CourseList", "Application2")?DepartmentID=" + $("#Departments").val(), function (data) { 
          var items = "<option>---------------------</option>"; 
          $.each(data, function (i, state) { 
           items += "<option value='" + state.Value + "'>" + state.Text + "</option>"; 
          }); 
          $("#applied_CourseId").html(items); 
         }); 
        }); 
       }); 
      </script> 
     } 
     <br /><br /> 
     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Create" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 
<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 
相关问题