MVC3 프레임 워크를 처음 사용하며 테이블 중 하나에 대한 데이터 편집 또는 생성과 관련하여 몇 가지 문제가 있습니다. 이 솔루션에서 EF 코드 첫 번째 방법을 사용했습니다.MVC3 모델보기 같은 테이블에 외래 키가 2 개있는 모델의 문제
동일한 테이블로 다시 링크되는 2 개의 필드가있는 테이블 하나가 있습니다. 예를 들면 : [entry] 테이블은 두 명의 다른 학생에 대한 참조를 가질 수 있습니다. 다음은이에 대한 코드는 다음과 같습니다
public class Entry
{
public int EntryID { get; set; }
public int DanceEventID { get; set; }
public int StudentID { get; set; }
public int? SecondaryStudentID { get; set; }
public int InstructorID { get; set; }
public int DanceID { get; set; }
public int DanceLevelID { get; set; }
public int StyleID { get; set; }
public int? EntryNumber { get; set; }
public virtual DanceEvent DanceEvent { get; set; }
public virtual Student Student { get; set; }
public virtual Student SecondaryStudent { get; set; }
public virtual Instructor Instructor { get; set; }
public virtual Dance Dance { get; set; }
public virtual DanceLevel DanceLevel { get; set; }
public virtual Style Style { get; set; }
}
public class Student
{
public int StudentID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int DanceLevelID { get; set; }
public virtual DanceLevel DanceLevel { get; set; }
public int StudioID { get; set; }
public virtual Studio Studio { get; set; }
public int GenderID { get; set; }
public virtual Gender Gender { get; set; }
public string FullName
{
get
{
return FirstName + " " + LastName;
}
}
}
내가 편집하거나보기에서 저장 가서 내가 SecondaryStudent를 입력 할 때,이 저장되지 않는다는 데 문제. 뷰는 하나의 Student 객체 만 생성하는 것 같습니다.
MVC3 이상의 제한 사항입니다. 잘못된 것입니다.
편집 : 다음은 작성보기 및 컨트롤러 코드입니다.
@model HeatBuilder.Models.Entry
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Entry</legend>
<div class="editor-label">
@Html.LabelFor(model => model.DanceEventID, "DanceEvent")
</div>
<div class="editor-field">
@Html.DropDownList("DanceEventID", String.Empty)
@Html.ValidationMessageFor(model => model.DanceEventID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.StudentID, "Student")
</div>
<div class="editor-field">
@Html.DropDownList("StudentID", String.Empty)
@Html.ValidationMessageFor(model => model.StudentID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.StudentID, "Second Student")
</div>
<div class="editor-field">
@Html.DropDownList("StudentID", String.Empty)
@Html.ValidationMessageFor(model => model.SecondaryStudentID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.InstructorID, "Instructor")
</div>
<div class="editor-field">
@Html.DropDownList("InstructorID", String.Empty)
@Html.ValidationMessageFor(model => model.InstructorID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.DanceID, "Dance")
</div>
<div class="editor-field">
@Html.DropDownList("DanceID", String.Empty)
@Html.ValidationMessageFor(model => model.DanceID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.DanceLevelID, "DanceLevel")
</div>
<div class="editor-field">
@Html.DropDownList("DanceLevelID", String.Empty)
@Html.ValidationMessageFor(model => model.DanceLevelID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.StyleID, "Style")
</div>
<div class="editor-field">
@Html.DropDownList("StyleID", String.Empty)
@Html.ValidationMessageFor(model => model.StyleID)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using HeatBuilder.Models;
namespace HeatBuilder.Controllers
{
public class EntryController : Controller
{
private HeatBuilderContext db = new HeatBuilderContext();
//
// GET: /Entry/
public ViewResult Index()
{
var entries = db.Entries.Include(e => e.DanceEvent).Include(e => e.Student).Include(e => e.SecondaryStudent).Include(e => e.Instructor).Include(e => e.Dance).Include(e => e.DanceLevel).Include(e => e.Style);
return View(entries.ToList());
}
//
// GET: /Entry/Details/5
public ViewResult Details(int id)
{
Entry entry = db.Entries.Find(id);
return View(entry);
}
//
// GET: /Entry/Create
public ActionResult Create()
{
ViewBag.DanceEventId = new SelectList(db.DanceEvents, "DanceEventId", "EventName");
ViewBag.StudentID = new SelectList(db.Students, "StudentID", "FullName");
ViewBag.SecondaryStudentID = new SelectList(db.Students, "SecondaryStudentID", "FullName");
ViewBag.InstructorId = new SelectList(db.Instructors, "InstructorID", "FullName");
ViewBag.DanceID = new SelectList(db.Dances, "DanceId", "DanceName");
ViewBag.DanceLevelId = new SelectList(db.DanceLevels, "DanceLevelID", "Description");
ViewBag.StyleID = new SelectList(db.Styles, "StyleID", "StyleDescription");
return View();
}
//
// POST: /Entry/Create
[HttpPost]
public ActionResult Create(Entry entry)
{
if (ModelState.IsValid)
{
db.Entries.Add(entry);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.DanceEventID = new SelectList(db.DanceEvents, "DanceEventId", "EventName", entry.DanceEventID);
ViewBag.StudentID = new SelectList(db.Students, "StudentID", "FullName", entry.StudentID);
ViewBag.SecondaryStudentID = new SelectList(db.Students, "SecondaryStudentID", "FullName", entry.SecondaryStudentID);
ViewBag.InstructorID = new SelectList(db.Instructors, "InstructorID", "FullName", entry.InstructorID);
ViewBag.DanceID = new SelectList(db.Dances, "DanceId", "DanceName", entry.DanceID);
ViewBag.DanceLevelID = new SelectList(db.DanceLevels, "DanceLevelID", "Description", entry.DanceLevelID);
ViewBag.StyleID = new SelectList(db.Styles, "StyleID", "StyleDescription", entry.StyleID);
return View(entry);
}
//
// GET: /Entry/Edit/5
public ActionResult Edit(int id)
{
Entry entry = db.Entries.Find(id);
ViewBag.DanceEventID = new SelectList(db.DanceEvents, "DanceEventId", "EventName", entry.DanceEventID);
ViewBag.StudentID = new SelectList(db.Students, "StudentID", "FullName", entry.StudentID);
ViewBag.SecondaryStudentID = new SelectList(db.Students, "SecondaryStudentID", "FullName", entry.SecondaryStudentID);
ViewBag.InstructorID = new SelectList(db.Instructors, "InstructorID", "FullName", entry.InstructorID);
ViewBag.DanceID = new SelectList(db.Dances, "DanceId", "DanceName", entry.DanceID);
ViewBag.DanceLevelID = new SelectList(db.DanceLevels, "DanceLevelID", "Description", entry.DanceLevelID);
ViewBag.StyleID = new SelectList(db.Styles, "StyleID", "StyleDescription", entry.StyleID);
return View(entry);
}
//
// POST: /Entry/Edit/5
[HttpPost]
public ActionResult Edit(Entry entry)
{
if (ModelState.IsValid)
{
db.Entry(entry).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.DanceEventID = new SelectList(db.DanceEvents, "DanceEventId", "EventName", entry.DanceEventID);
ViewBag.StudentID = new SelectList(db.Students, "StudentID", "FullName", entry.StudentID);
ViewBag.SecondaryStudentID = new SelectList(db.Students, "SecondaryStudentID", "FullName", entry.SecondaryStudentID);
ViewBag.InstructorID = new SelectList(db.Instructors, "InstructorID", "FullName", entry.InstructorID);
ViewBag.DanceID = new SelectList(db.Dances, "DanceId", "DanceName", entry.DanceID);
ViewBag.DanceLevelID = new SelectList(db.DanceLevels, "DanceLevelID", "Description", entry.DanceLevelID);
ViewBag.StyleID = new SelectList(db.Styles, "StyleID", "StyleDescription", entry.StyleID);
return View(entry);
}
//
// GET: /Entry/Delete/5
public ActionResult Delete(int id)
{
Entry entry = db.Entries.Find(id);
return View(entry);
}
//
// POST: /Entry/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
Entry entry = db.Entries.Find(id);
db.Entries.Remove(entry);
db.SaveChanges();
return RedirectToAction("Index");
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
}
감사합니다.
을 요청 렌더링 때 당신은 몇 가지 기술을 혼동하고 있습니다. MVC는 지속성 계층과 아무 관련이 없습니다. 항목을 저장할 때 사용하는 코드를 알려주십시오. – driis
감사합니다. 나는 원래의 포스트를 편집하여 컨트롤러 코드를 포함하고 뷰 / – edgel1k