好吧,經過幾個小時的故障排除,我放棄了,但我相信你們都會馬上看到解決方案。我有三個模型Person,Course和CoursePreference。 CoursePreference模型有兩個外鍵PersonId和CourseId。使用局部視圖在同一視圖中創建並編制索引
我想要做什麼: 我想創建一個視圖,用戶可以在頂部創建部分添加課程首選項,當他們單擊添加時,表單將在同一視圖中發佈和刷新列表。基本上我在一個視圖中組合索引和創建。所以我在CoursePreference文件夾中創建了一個Index View和一個名爲_CreatePartial的局部視圖。
問題: 視圖顯示正常,但有兩個問題。 1)CoursePreferenceId字段顯示一個下拉列表。我希望它是一個隱藏的領域,因爲它是一個身份。我完全從腳手架創建視圖中複製了代碼,這會正確隱藏Id。不知道爲什麼它不在_CreatePartial視圖中工作? 2)最重要的是,我的_CreatePartial不會添加任何課程偏好。它看起來好像表單發佈但沒有添加記錄。
什麼給?
這裏是模型,控制器和視圖:
---------------------------
Models (stripped down versions)
---------------------------
public class CoursePreference
{
public int CoursePreferenceId { get; set; }
public Nullable<int> CourseId { get; set; }
public Nullable<int> PersonId { get; set; }
public virtual Course Course { get; set; }
public virtual Person Person { get; set; }
}
public class Person
{
public int PersonId { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public virtual ICollection<CoursePreference> CoursePreferences { get; set; }
}
public class Course
{
public int CourseId { get; set; }
public Nullable<int> ProgramId { get; set; }
public string Name { get; set; }
public virtual ICollection<CoursePreference> CoursePreferences { get; set; }
}
------------------
Controllers
------------------
public ActionResult _CreatePartial()
{
ViewBag.CourseId = new SelectList(db.Courses, "CourseId", "Name");
ViewBag.PersonId = new SelectList(db.People, "PersonId", "LastName");
return View("_CreatePartial");
}
public ActionResult Index()
{
ViewBag.CourseId = new SelectList(db.Courses, "CourseId", "Name");
ViewBag.PersonId = new SelectList(db.People, "PersonId", "LastName");
var coursepreferences = db.CoursePreferences.Include(c => c.Course).Include(c => c.Person);
return View(coursepreferences.ToList());
}
---------------------------
Index View
---------------------------
@model IEnumerable<MyProj.Models.CoursePreference>
@{ ViewBag.Title = "Index";
}
<h4>Add Course Preferences</h4>
<div>
@Html.Partial("~/Views/CoursePreference/_CreatePartial.cshtml", new MyProj.Models.CoursePreference())
</div>
<br />
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Course.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Person.LastName)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Course.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Person.LastName)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.CoursePreferenceId }) |
@Html.ActionLink("Details", "Details", new { id=item.CoursePreferenceId }) |
@Html.ActionLink("Delete", "Delete", new { id=item.CoursePreferenceId })
</td>
</tr>
}
</table>
---------------------------
_CreatePartial View
---------------------------
@model MyProj.Models.CoursePreference
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>CoursePreference</h4>
<hr />
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.CoursePreferenceId, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CoursePreferenceId)
@Html.ValidationMessageFor(model => model.CoursePreferenceId)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CourseId, "CourseId", new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("CourseId", String.Empty)
@Html.ValidationMessageFor(model => model.CourseId)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.PersonId, "PersonId", new { @class = "control-label col-md-2" }
<div class="col-md-10">
@Html.DropDownList("PersonId", String.Empty)
@Html.ValidationMessageFor(model => model.PersonId)
</div>
</div>
<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>
謝謝,這解決了保存和隱藏的領域問題。我錯誤地將我的POST代碼放入了部分視圖中。我的印象是,Partial視圖也做了插入新記錄的工作,事實上,當Index視圖/控制器執行db.Object.Add時。 Stackoverflow岩石。 – SKale