我想在同一時間更新兩個模型。如何在ASP.NET MVC 5實體框架中同時更新多個模型
型號:
- 頁
- 場
一個網頁上有多個領域,我希望他們能夠在同一時間更新。
public class PageEditViewModel
{
public Page mPage { get; set; }
public IEnumerable<Field> Fields { get; set; }
}
這是我的觀點:
<div class="row">
<div class="col-md-12">
<h3>Fields</h3>
@foreach (var field in Model.ContentFields)
{
@Html.HiddenFor(m => field.Id)
switch (field.FieldType)
{
case "TextBox":
<div class="form-group">
<label class="control-label">
@field.FieldName<span class="required"> * </span>
</label>
@Html.TextBoxFor(m => field.Content , new { @class = "form-control" })
</div>
break;
case "TextArea":
<div class="form-group">
<label class="control-label">
@field.FieldName<span class="required"> * </span>
</label>
@Html.TextAreaFor(m => field.Content, new { @class = "form-control" })
</div>
break;
case "Image":
<div class="form-group">
<label class="control-label">
@field.FieldName<span class="required"> * </span>
</label>
<input type="file" name="contentImage" id="cImage" class="form-control" accept="image/*" />
</div>
break;
}
}
</div>
</div>
和控制器:
public ActionResult Update(PageEditViewModel viewModel)
{
if (!ModelState.IsValid)
{
var page = _context.MenuPages.Single(s => s.Id == viewModel.mPage.Id);
var contentFields = _context.ContentFields.Where(c => c.MenuPageId == page.Id);
var viewM = new PageEditViewModel
{
DashboardHeading = "Edit a Page",
mPage = page,
ContentFields = contentFields
};
return View("EditPage", viewM);
}
var pageEdit = _context.MenuPages.SingleOrDefault(p => p.Id == viewModel.mPage.Id);
pageEdit.Name = viewModel.mPage.Name;
pageEdit.IsActive = viewModel.mPage.IsActive;
pageEdit.IsShowInMenu = viewModel.mPage.IsShowInMenu;
// _context.SaveChanges();
foreach (var field in viewModel.ContentFields)
{
var cfield = _context.ContentFields.SingleOrDefault(f => f.Id == field.Id);
cfield.Content = field.Content;
}
_context.SaveChanges();
當我發送數據從景觀到控制器,我得到的頁面數據,但是空的字段模型(對象引用未設置爲實例...)。
我期待着來自會員的任何指導。
謝謝。
有相當相似類型的問題在這裏找到:https://stackoverflow.com/questions/18237945/how-to-edit-save-viewmodels-data-back-to - 數據庫 – jyrkim
@GertArnold讓我在這裏添加更多的代碼。 – Aleem
@GertArnold我已經更新了這個問題,請看看。 – Aleem