我的问题不久就是: 我有一个View - 强烈输入模型任务。 我在视图中有一个表单,稍后会传递给控制器。 我想在View中为task.CreationUserId赋值。该值使用ViewBag进入视图,但并不重要 我该怎么做?语法是什么?
如果您想阅读整个故事:
我有一个创建任务的视图。该视图是对任务模型的强类型。 任务的一个参数是taskCreationUserID。
首先我有一个控制器作为参数CurrentuserId
public ActionResult CreateForEdit(int id)
{
ViewBag.AmountsId = new SelectList(db.Amounts1, "Id", "Interval");
ViewBag.TaskStatusesId = new SelectList(db.TaskStatuses, "Id", "Status");
ViewBag.TaskTypesId = new SelectList(db.TaskTypes, "Id", "Type");
ViewBag.CreationUserID = new SelectList(db.Users, "Id", "UserName");
ViewBag.UserId = id;
return View();
}
调用此观点:
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Task</legend>
@Html.HiddenFor(model => model.Id)
div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
等等......
然后我使用控制器保存此任务:
[HttpPost]
public ActionResult CreateForEdit(Task task)
{
if (ModelState.IsValid)
{
task.CreationDate = DateTime.Now;
task.Piority = "p2";
task.TaskStatusesId = 1;
task.CreationUserID = UserId;
db.Tasks.Add(task);
db.SaveChanges();
return RedirectToAction("Index", new { id = UserId });
}
问题是:我如何在View中查看ViewBag.UserId的值,以便它将作为task.CreationUserID返回控制器?
答案 0 :(得分:1)
ViewBag一次可用于一个回发请求,您可以使用Session而不是View Bag
答案 1 :(得分:1)
Viewbag只是一个保存数据的动态对象。没有涉及国家管理。什么东西都会在回发中松动。
您必须在模型中添加UserId并添加隐藏字段,就像model.id
一样
答案 2 :(得分:0)
我假设您的Task对象上有UserId属性,或者您可以创建一个。
不要将它放在ViewBag中,而是在yout Task
方法中创建一个新的HttpGet
对象,并将id
的值分配给其属性:var task = new Task(); task.CreationUserID = id;
< / p>
然后将Task
对象传递到隐藏字段中的View en store task.CreationUserID
:@Html.HiddenFor(model => model.CreationUserID)
在HttpPost
方法中,您会发现从任务属性task.CreationUserID
中检索它
这样您就可以从task.CreationUserID = UserId;
if statement