まず、私の悪い英語を申し訳ありません。私はブラジルから来ました。私は.NET MVC5の初心者です。MVC5バインドに値を追加する
モデルクラスTask
にID
と4つの編集可能な列がありました。新しいTask
を作成する場合、ユーザーは2つだけ(TaskType
とSubject
)を入力する必要があります。残りの2つの列(UserID
およびCreationDate
)には、システムから取得した情報(ユーザーIDおよび現在の日付)が入力されている必要があります。私はそれを見せずに、最初にこの情報を含めることを試みた
public ActionResult Create()
{
ViewBag.TaskTypeID = new DAO.TaskTypesDAO().ListOfTypes();
ViewBag.ApplicationUserId = User.Identity.GetUserId();
ViewBag.CreationDate = DateTime.Now;
return View();
}
とビューで作成します:次に、Create
に私はViewBagで、この二つの情報を入れて、入手
まず、私はHiddenFor()
を試してみましたが、DisplayFor()
@Html.LabelFor(model => model.CreationDate, "Creation Date")
@Html.DisplayFor(model => model.CreationDate)
@Html.HiddenFor(model => model.CreationDate)
@Html.LabelFor(model => model.ApplicationUserId, "Creator")
@Html.DisplayFor(model => model.User.Id)
@Html.HiddenFor(model => model.ApplicationUserId)
DisplayFor()
で後は何も表示されません。
そして、私はポストCreate
方法に
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,TaskTypeID,Subject,CreationDate,ApplicationUserId")] Task task)
{
if (ModelState.IsValid)
{
db.Tasks.Add(task);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.TaskTypeID = new DAO.TaskTypesDAO().ListOfTypes();
ViewBag.ApplicationUserId = User.Identity.GetUserId();
ViewBag.CreationDate = DateTime.Now;
return View(tarefa);
}
を提出するときにModelStateは無効であるとtask.CreationDateとtask.ApplicationUserIdが空です。
この2つの情報は、作成後バインドの前にどのように含めることができますか?
または、それ以外の場合、後でModelStateを再検証する方法はありますか?あなたはViewBagを通じてビューにCreationDate
とApplicationUserId
を送信し、それをバック掲示されている理由を私は理解していない
か.....
あなたのビューにモデルを渡すことさえありません( 'HtmlHelper'メソッドは' ViewBag'ではなくあなたのモデルのプロパティにバインドします)。しかし、いずれにせよ、これはすべて間違っている。 'ApplicationUserId'と' CreationDate'の値をGETメソッドに設定したり、ビューのフォームコントロールをインクルードしたりせずに、オブジェクトを保存する直前にPOSTメソッドでそれらを設定します。そして、[MVCのViewModelとは何ですか?](http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc)を読むことを強くお勧めします。 –