這是簡單化了的場景:如何在一個一對多的關係發表評論添加到實體
我有一個類Device
[Key]
public int Id { get; set; }
[MaxLength(50)]
public String Name { get; set; }
[Required]
public Category Category { get; set; }
[Required]
public Manufactor Manufactor { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
public virtual ICollection<Status> Status { get; set; }
和A類Comment
public int ID { get; set; }
public string Content { get; set; }
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime DateCreated { get; set; }
public string Author { get; set; }
public virtual Device Device { get; set; }
正如你所看到的設備的實體可以有很多評論,但一個評論只有一個設備。
在我的控制器我有這兩個動作:
public ActionResult AddComment(int id)
{
Device device = db.Devices.Include(x => x.Comments).Where(dev => dev.Id == id).FirstOrDefault();
if (device == null)
{
return HttpNotFound();
}
return View(device);
}
[HttpPost, ActionName("CommentAdded")]
public ActionResult CommentAdded(int id)
{
Device device = db.Devices.Find(id);
db.Entry(device).State = EntityState.Modified;
db.Devices.AddOrUpdate(device);
foreach(var comment in device.Comments)
{
db.Comments.AddOrUpdate(comment);
}
db.SaveChanges();
return View("Index");
}
到現在爲止一切都顯得直截了當。但是suddently我不知道如何創建一個視圖中,我能做到這三兩件事:
- 顯示設備
- 顯示的名稱所有評論
- 顯示一個文本框添加其他評論
我可以輕鬆實現1和2,但我不知道如何添加其他評論,然後提交表單。
AddComment.cshtml:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Device</h4>
<hr />
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.Id)
<div class="form-group">
@Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
<div class="col-md-4">
@Html.DisplayFor(model => model.Name)
</div>
<div class="col-md-6">
<br/>
<div class="row">
@Html.EditorFor(model => model.Comments)
</div>
@foreach (var comment in Model.Comments)
{
<div class="row">
<div class="col-md-4">
<strong>
@Html.DisplayFor(model => comment.Author)
</strong>
</div>
<div class="col-md-4">
<strong>
@Html.DisplayFor(model => comment.DateCreated)
</strong>
</div>
<div class="col-md-4">
</div>
</div>
<div class="row">
<div class="col-md-12">
<p>
@Html.DisplayFor(model => comment.Content)
</p>
</div>
</div>
}
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
</div>
}
眼下的問題是:我需要什麼,我認爲(POS控制器)來改變,才能夠添加到設備的另一個選擇評論?
與代碼相關但不是問題的癥結:在上下文中的DbSets上使用AddOrUpdate時要小心。這種擴展方法真的是用於遷移,並不總是像在播種領域之外期望的那樣行事。 –