如何绑定当前记录的用户ID并将其传递给控制器​​中的create方法

时间:2015-06-09 13:10:26

标签: asp.net-mvc database asp.net-mvc-5

我有一个名为Advertisement的表,它有多列,包括UserId作为外键引用它。这是引用AspNetUsers表ID列。该表是使用项目本身创建的表。

我创建了广告表和用户CRUD,用于创建Controller和View以更新表。当它创建视图时,它创建了一个下拉列表,我必须选择当前登录的用户。但我希望从User.Identity.GetUserID获取当前用户ID,并将其分配到UserId字段并将其发布到create方法,以便将其保存在Advertisement表中。

我该怎么做?如何将值绑定到它而不是从下拉列表中选择?

很抱歉,因为我是这个MVC的新手,我可能已经解释错了。如果您不清楚我可以提供有关我的问题的更多详细信息。

在此处查看我的部分观点

   <div class="form-group">
        @Html.LabelFor(model => model.UserId, "UserId", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("UserId", null, htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.UserId, "", new { @class = "text-danger" })
    </div>

我的控制器方法

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "AdId,AdTitle,AdDesc1,AdDesc2,PostCode,AddressLine1,AddressLine2,DoorNumber,SubCatId,UserId")] Advertisement advertisement)
    {
        if (ModelState.IsValid)
        {
            db.Advertisements.Add(advertisement);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        ViewBag.UserId = new SelectList(db.AspNetUsers, "Id", "Email", advertisement.UserId);
        ViewBag.SubCatId = new SelectList(db.SubCategories, "SubCatId", "SubCatDesc", advertisement.SubCatId);
        return View(advertisement);
    }

1 个答案:

答案 0 :(得分:2)

  

如何将值绑定到[模型属性]而不是从下拉列表中选择?

在GET的控制器操作中(您的代码仅显示POST),只需将model.UserId设置为您想要的值并使用

@Html.HiddenFor(x=>x.UserId)

而不是DropDownList。如果您仍想显示/允许更改,则可以使用DropDownListFor;如果您不希望将其绑定到视图模型中的属性,则可以使用@Html.Hidden("UserID")

  

我想从User.Identity.GetUserID获取当前用户ID ...将其发布到create方法,以便将其保存在Advertisement表中。

为什么不直接在POST操作中使用User.Identity.GetUserID

如果您正在尝试这样做,则似乎没有必要通过视图传递它。在控制器中,当前用户为User.Identity.Name

我可能在这里遗漏了一些东西......