私は昨日質問しました。これはここで見つけることができ、ここで見つけることができる asp.net/mvc フォーラムから得た回答に基づいて、デフォルトではフォームがデフォルト値を保持する傾向があるため、モデル状態をクリアするように言われました。 、更新しようとした値ではありません。を追加しましたが、まだ機能しません。ModelState.Clear() を間違った場所で使用しているかどうか、または何かを変更する必要があるかどうかを誰かに教えてもらえますか?Modelstate.Clear()
ここに問題があります。ユーザーが編集ボタンをクリックすると、テキストボックスに現在の値を表示する編集フォームがあります。ユーザーがテキスト ボックスに表示されている現在の値を編集したい場合は、テキスト ボックスの値を編集し、[変更を保存] ボタンをクリックします。現在何が起こっているかは、渡された値を確認するときに HttpPost メソッドで行われます。ユーザーが提供した新しい値を取得するのではなく、現在の値としてフォームに表示された値を取得します。しかし、クロムの開発者ツールをチェックインすると、サーバーに渡される値としてユーザーが提供した新しい値が表示されます。
これが私の見解です
@using BootstrapSupport
@model AdminPortal.Areas.Hardware.Models.EditModule
@{
ViewBag.Title = "Edit";
Layout = "~/Views/shared/_BootstrapLayout.basic.cshtml";
}
<fieldset>
<legend>Module <small>Edit</small></legend>
@using (Html.BeginForm("Edit", "Module"))
{
@Html.ValidationSummary(true)
@Html.HiddenFor(m=>m.Id)
for(var i = 0; i < Model.Properties.Count(); i++)
{
@Html.HiddenFor(model=>model.HiddenProperties[i].Name)
@Html.HiddenFor(model=>model.HiddenProperties[i].Value)
<label class="label">@Model.Properties[i].Name</label>
<div class="input-block-level">@Html.TextBoxFor(model => model.Properties[i].Value)</div>
}
<div class="form-actions">
<button type="submit" class="btn btn-primary" id="Submit">Save changes</button>
@Html.ActionLink("Cancel", "ModuleList", null, new { @class = "btn " })
</div>
}
</fieldset>
<p>
@Html.ActionLink("Back to List", "ModuleList")
</p>
コントローラーの get メソッドと post メソッドは次のとおりです。
[HttpGet]
public ActionResult Edit(long id)
{
var module = _repository.GetModuleProperties(id);
ModelState.Clear();
return View(module);
}
[HttpPost]
public ActionResult Edit(EditModule module)
{
ModelState.Clear();
if (ModelState.IsValid)
{
_repository.SaveModuleEdits(module);
Information("Module was successfully edited!");
return RedirectToAction("ModuleList", "Module", new {area = "Hardware"});
}
Error("Edit was unsuccessful, if the problem persists please contact Merijn!");
return RedirectToAction("ModuleList", "Module", new { area = "Hardware" });
}