私が作成しようとしているのは、モデルのプロパティが表示されるビューと、1 つのプロパティ (この場合はヘルパーを作成した「ステータス」) を変更するオプションです。
変更されたプロパティが正しく変更され、変更されたところまで来ましたが、どういうわけか他のプロパティの値がリセットされています。
これは、投稿データがモデルの変更に使用されているためであり、一部のプロパティは変更できないため、モデルの更新に空の値が使用されているためだと思いますか?
ここに私のコントローラGETがあります:
public ActionResult Edit(int id = 0)
{
ProductCode productcode = db.ProductCodes.Find(id);
if (productcode == null)
{
return HttpNotFound();
}
return View(productcode);
}
そしてここに投稿:
[HttpPost]
public ActionResult Edit(ProductCode productcode)
{
if (ModelState.IsValid)
{
db.Entry(productcode).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(productcode);
}
そして最後にビュー:
@model PortalTMC.Models.ProductCode
@{
ViewBag.Title = "Change status";
}
<h2>Status veranderen</h2>
<br />
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>ProductCode</legend>
@Html.HiddenFor(model => model.Id)
@Html.LabelFor(model => model.Id, "Id")
@Html.DisplayFor(m => m.Id)
@Html.LabelFor(model => model.Code, "Product code")
@Html.DisplayFor(m => m.Code)
@Html.LabelFor(model => model.Role, "Rol (1 = Administrator | 2 = Trainer | 3 = User)")
@Html.DisplayFor(m => m.Role)
<div class="editor-label">
@Html.LabelFor(model => model.Status, "Status")
</div>
<div class="editor-field">
@Html.EnumDropDownListFor(model => model.Status)
</div>
<p>
<input type="submit" value="Verander status" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Terug naar lijst", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
どんな助けでも大歓迎です
アップデート:
残念ながら、post メソッドのプロパティを含めたり除外したりすることはできません:/ たとえば、post メソッドを次のように置き換えた場合:
[AcceptVerbs(HttpVerbs.Post)]
[HttpPost]
public ActionResult Edit([Bind(Exclude = "Role, Code")] ProductCode productcode)
{
if (ModelState.IsValid)
{
db.Entry(productcode).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(productcode);
}
私はまだ役割とコードがリセットされてしまいます..
商品コードは以下の通りです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace PortalTMC.Models
{
public class ProductCode
{
//PK
[Key]
public int Id { get; set; }
public string Code { get; set; }
public ProductCodeStatus Status { get; set; }
public int Role { get; set; }
}
public enum ProductCodeStatus
{
Active,
Inactive,
Pending,
}
}