如何将值从强类型视图传递给Controller

时间:2013-01-17 12:02:37

标签: asp.net-mvc

我的问题不久就是: 我有一个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返回控制器?

3 个答案:

答案 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