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>

我该如何解决这个问题?

ASP.net 会话数据在创建视图中添加内容

尝试重写为

[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。