Краткое описание того, что я делаю. Я создаю довольно грубую базу данных по отслеживанию активов с использованием ASP MVC 3 и EF Code First. Я могу создать новый актив. Я могу просмотреть подробную информацию об активе. Я даже могу отобразить вид редактирования и редактировать AssetTag. Однако запись не будет обновлять ни одно из других полей. Если я редактирую LocationName, например. Он будет вести себя так, как будто он публикует, и возвращает меня в представление «Индекс», но запись никогда не публикует изменения.
Я создал модель ниже
public class AssetModel
{
public int id { get; set; }
public string AssetTag { get; set; }
public virtual Location Location { get; set; }
public virtual Hardware Hardware { get; set; }
public virtual Software Software { get; set; }
public virtual User User { get; set; }
}
public class Location
{
public int LocationId { get; set; }
public string LocationName { get; set; }
}
public class Hardware
{
public int HardwareId { get; set; }
public string Manufacturer { get; set; }
public string Make { get; set; }
public string Model { get; set; }
}
public class Software
{
public int SoftwareId { get; set; }
public string PublisherName { get; set; }
public string SoftwarePackageName { get; set; }
public string SoftwarePackageVersion { get; set; }
public string SerialNumber { get; set; }
public bool IsVolumeLicense { get; set; } // as in "Yes this is a Vol. Lic. Agreement"
public LicenseAgreement LicenseAgreement { get; set; }
}
public class LicenseAgreement
{
public int LicId { get; set; }
public string VolumeLicenseAgreementCompany { get; set; }
public string AgreementIdentifier { get; set; }
public DateTime VolumeLicenseStartDate { get; set; }
public DateTime VolumeLicenseExpirationDate { get; set; }
public Int16 NumberOfLicenses { get; set; }
}
public class User
{
// may remove this at some time and pull from Active Directory.
// for now we take the easy route.
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
У меня есть этот DbDataSet, который использует вышеуказанную модель AssetModel:
public class AssetContext : DbContext
{
public DbSet<AssetModel> Assets { get; set; }
}
В моем AssetController у меня есть это для редактирования:
public ActionResult Edit(int id)
{
AssetModel assetmodel = db.Assets.Find(id);
return View(assetmodel);
}
//
// POST: /Asset/Edit/5
[HttpPost]
public ActionResult Edit(AssetModel assetmodel)
{
if (ModelState.IsValid)
{
db.Entry(assetmodel).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(assetmodel);
}
А вот и Edit.cshtml
@model ISHelpDesk.Models.AssetModel
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
@using (Html.BeginForm("Edit", "Asset")) {
@Html.ValidationSummary(true)
<fieldset>
<legend>AssetModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.AssetTag)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.AssetTag)
@Html.ValidationMessageFor(model => model.AssetTag)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Location.LocationName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Location.LocationName)
@Html.ValidationMessageFor(model => model.Location.LocationName)
</div>
</fieldset>
<p><input type="submit" value="Save"</p>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>