我是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然后我得到这个问题? 如何解决这个问题呢 ?
答案 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");
}
考虑到您的问题,这将是最简单的解决方案。更合适的是将文本框直接绑定到模型属性。这样,您就不必担心在控制器中检索和分配属性值到模型。