我有一个名为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);
}
答案 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
我可能在这里遗漏了一些东西......