数据未插入数据库

时间:2014-08-23 09:26:36

标签: asp.net-mvc-4

我是asp .net MVC 4的新手。

我有一个文本框和我从一个表中获取的文本框值。但是当点击提交按钮这个值时我要插入到不同的表中,这不是插入并显示错误。它取值为null

编码

查看

@Html.TextBox("empname", (string)ViewBag.empname, new { @readonly = "readonly" })

控制器

[HttpGet]
public ActionResult Facilities()
{
    mstEmpDetail emp = new mstEmpDetail();
    emp = db.mstEmpDetails.Single(x => x.intEmpId == 10001);
    ViewBag.empname = emp.txtEmpFirstName;

    return View();
}

[HttpPost]
public ActionResult Facilities(TrnBusinessCardDetail bc)
{
    var empname1 = ViewBag.empname;
    bc.txtfirstName = empname1;
    db.TrnBusinessCardDetails.Add(bc);
    db.SaveChanges();

    return RedirectToAction("Facilities");
}

当我使用普通文本框时,它正确插入,但是当我检索时 来自DB然后我得到这个问题? 如何解决这个问题呢 ?

3 个答案:

答案 0 :(得分:1)

Viewbag是一条单行道 - 您可以使用它将信息传递给视图,但不能使用它来从视图中获取信息。 POST方法中的语句ViewBag.empname在代码中的值为null。

答案 1 :(得分:0)

我认为问题是当你在帖子控制器中使用var empname1 = ViewBag.empname;时,ViewBag.empname在那时失去了它的价值。

答案 2 :(得分:0)

正如@dotnetom所建议的那样,ViewBag是一条单行道。 MVC是无状态的,因此POST请求不是"往返"从以前的获取请求。因此,您的ViewBag无法保持其状态。

MVC可以从表单参数中确定(并构造)您的操作参数。在您的情况下,您添加了一个名为" empname"的文本框。因此,您应该在POST请求中将此值作为参数。

 [HttpPost]
    public ActionResult Facilities(TrnBusinessCardDetail bc, string empname)
    {
        bc.txtfirstName = empname;
        db.TrnBusinessCardDetails.Add(bc);
        db.SaveChanges();

        return RedirectToAction("Facilities");
    }

考虑到您的问题,这将是最简单的解决方案。更合适的是将文本框直接绑定到模型属性。这样,您就不必担心在控制器中检索和分配属性值到模型。