我有一个用于编辑 View 的ViewModel。返回数据后,要编辑的项目的ID不会显示在编辑 View 中。
public ActionResult Edit(int id)
{
Parcel parcel = _parcelDao.GetParcel(id);
ParcelEditViewModel viewModel = new ParcelEditViewModel();
viewModel.id = parcel.id;
return View(viewModel);
}
我应该返回与View不同的东西吗?
ViewModel :
public class ParcelEditViewModel
{
public Parcel parcel { get; set; }
public int id { get; set; }
public IEnumerable<SelectListItem> TrackStatus { get; set; }
public ParcelEditViewModel()
{
parcel = new Parcel();
TrackStatus = new List<SelectListItem>
{
new SelectListItem
{
Value = "AwaitingCollection",
Text = "Awaiting Collection"
},
new SelectListItem
{
Value = "OutForDelivery",
Text = "Out For Delivery"
},
new SelectListItem
{
Value = "Delivered",
Text = "Delivered"
}
};
}
public int ParcelStatus { get; set; }
}
View :
//@model ABC.Data.Parcel
@model Abc.ViewModels.ParcelEditViewModel
@{
ViewBag.Title = "Edit";
}
<h2>Edit</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>Parcel</legend>
@Html.HiddenFor(model => model.parcel.id)
<div class="editor-label">
@Html.LabelFor(model => model.parcel.Forename)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.parcel.Forename)
@Html.ValidationMessageFor(model => model.parcel.Forename)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.parcel.Surname)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.parcel.Surname)
@Html.ValidationMessageFor(model => model.parcel.Surname)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.parcel.CompanyName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.parcel.CompanyName)
@Html.ValidationMessageFor(model => model.parcel.CompanyName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.parcel.Address1)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.parcel.Address1)
@Html.ValidationMessageFor(model => model.parcel.Address1)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.parcel.Address2)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.parcel.Address2)
@Html.ValidationMessageFor(model => model.parcel.Address2)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.parcel.Address3)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.parcel.Address3)
@Html.ValidationMessageFor(model => model.parcel.Address3)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.parcel.Postcode)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.parcel.Postcode)
@Html.ValidationMessageFor(model => model.parcel.Postcode)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ParcelStatus)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.parcel.TrackingStatus, Model.TrackStatus)
@Html.ValidationMessageFor(model => model.ParcelStatus)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.parcel.TrackingNumber)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.parcel.TrackingNumber)
@Html.ValidationMessageFor(model => model.parcel.TrackingNumber)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.parcel.CustomerId)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.parcel.CustomerId)
@Html.ValidationMessageFor(model => model.parcel.CustomerId)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
最佳答案
您需要将 View 模型属性的所有填充;不只是ID。 ParcelEditViewModel
不了解数据库中的内容。public ActionResult Edit(int id)
{
Parcel parcel = _parcelDao.GetParcel(id);
ParcelEditViewModel viewModel = new ParcelEditViewModel();
viewModel.id = parcel.id;
// Populate other properties! These may not be right.
viewModel.ProductName = parcel.Title;
viewModel.RecipientName; = parcel.RecipientName;
return View(viewModel);
}
有诸如AutoMapper之类的映射库可以帮助简化此过程。
关于asp.net-mvc - ViewModel不填充输入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22354626/