ASP.net 会话数据在创建视图中添加内容
本文关键字:添加 视图 创建 net 会话 数据 ASP | 更新日期: 2023-09-27 18:29:20
我创建了这个简单的 ASP.NET 项目。(使用 MVC 的默认模板(
在那里,我使用 ADO.net 从我的数据库生成模型
我还为我的模型生成了控制器。(模型生成用于创建、编辑、删除的函数...我还查看了控制器中的每个功能。
所以我现在要做的是:
-我在我的创建视图中。(这意味着我看到了用于创建对象的表单(-我需要输入 [标题、内容] 的数据,但要在数据库中发布,我还需要一个 id(这个 id 是外键,而不是我正在创建的对象的 id(
我已经在我的会话中保存了此 ID。我可以通过执行以下操作来访问会话数据:
var user = Session["user"] as Uporabniki; //returns session data
user.id //selects id from session
现在我想要的是创建表单文本框中使用此 id。
到目前为止,我视图中的 id 行如下所示(我不知道为什么它是一个下拉列表。当我打开站点时,我看到数据库中所有用户的名称,我可以选择一个。但这不是我想要的。我只想看一个(:
<div class="form-group">
@Html.LabelFor(model => model.id_avtorja, "id_avtorja", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("id_avtorja", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.id_avtorja, "", new { @class = "text-danger" })
</div>
</div>
控制器中的创建方法如下所示
// GET: Vprasanjas/Create
public ActionResult Create()
{
ViewBag.id_avtorja = new SelectList(db.Uporabniki, "id", "uporabniskoIme");
return View();
}
// POST: Vprasanjas/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "id,naslov,vsebina,datum,id_avtorja")] Vprasanja vprasanja)
{
if (ModelState.IsValid)
{
db.Vprasanja.Add(vprasanja);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.id_avtorja = new SelectList(db.Uporabniki, "id", "uporabniskoIme", vprasanja.id_avtorja);
return View(vprasanja);
}
如果我将视图更改为这样的内容,为什么它不起作用:
<div class="form-group">
@Html.LabelFor(model => model.id_avtorja, "id_avtorja", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@var user = Session["user"] as Uporabniki;
@Html.Raw(user.id)
@Html.ValidationMessageFor(model => model.id_avtorja, "", new { @class = "text-danger" })
</div>
</div>
我该如何解决这个问题?
尝试重写为
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "id,naslov,vsebina,datum,id_avtorja")] Vprasanja vprasanja)
{
if (ModelState.IsValid)
{
vprasanja.id = (Session["user"] as Uporabniki).id;
db.Vprasanja.Add(vprasanja);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.id_avtorja = new SelectList(db.Uporabniki, "id", "uporabniskoIme", vprasanja.id_avtorja);
return View(vprasanja);
}
主要思想 - 在帖子中分配您的ID。
请发布一些有关错误的信息。但我的猜测是你没有创建任何输入HTML元素,所以没有发布任何东西。您需要表单中的类似<input type="hidden" id="id_avtorja" value="@user.id">
的东西。
另外,我建议不要使用会话变量中的数据。这是较旧的技术,在哲学上非常非MVC。