我是mvc的新手,我正在努力解决这个模型问题。 我的理解是每个动作我只能使用一个模型。
public class TestModel
{
public string foo1 { get; set; }
public string foo2 { get; set; }
public string foo3 { get; set; }
}
我想在正常操作中部分加载我的模型:
public ActionResult Index()
{
TestModel model = new TestModel();
model.foo1 = "foo1";
return View(model);
}
然后,用户应该从视图中向模型添加数据。
@model SAS_MVC.Models.Test.TestModel
@using (Html.BeginForm())
{
@Html.EditorFor(model => model.foo1, new { htmlAttributes = new { @class = "form-control" } })
@Html.EditorFor(model => model.foo2, new { htmlAttributes = new { @class = "form-control" } })
@Html.EditorFor(model => model.foo3, new { htmlAttributes = new { @class = "form-control" } })
<input type="submit" value="submit" />
}
根据用户的数据,我必须在后置控制器中添加更多数据:
[HttpPost]
public ActionResult Index(MyModel model, FormCollection form)
{
// get some data from DB
model.foo3 = 123;
return View(model);
}
如何永久保存此模型?我有问题,例如foo3在视图中为空。我想在后控制器和视图之间传递模型几次而不会丢失数据。
我确实尝试过使用TempData和ViewBag,但对我而言,这对于使用...没有intellisense非常不舒服。
那我该怎么办呢?谢谢你的帮助!
使用EF6更新:
public class MyEntity
{
public int Id { get; set; }
public string Name { get; set; }
}
public class TestController : Controller
{
DB03SASModel dbModel = new DB03SASModel();
// GET: Test
public ActionResult Index()
{
MyEntity model = new MyEntity();
model.Name = "AAAA";
dbModel.MyEntities.Add(model);
dbModel.SaveChanges();
return View(model);
}
[HttpPost]
public ActionResult Index(MyEntity model)
{
model.Name = "BBBB";
dbModel.SaveChanges();
//UpdateModel(model);
return View(model);
}
}
查看
@model SAS_MVC.MyEntity
@using (Html.BeginForm())
{
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
@Html.DisplayFor(model => model.Id, new { htmlAttributes = new { @class = "form-control" } })
@Html.HiddenFor(model => model.Id, new { htmlAttributes = new { @class = "form-control" } })
<input type="submit" value="submit" />
}
现在我使用EF Code First保存模型,然后在DB中检查它 - &gt;一切都得到了很好的保存。 但是:观点再次采取了错误的价值,我仍然在努力。 我发现@Html.HiddenFor为我提供了后控制器中实体的当前ID。比我将值更改为“BBBB”,而不是将完全相同的实体传递回视图,但视图从未进行过更新! 我不后悔。当我尝试使用UpdateModel(模型); “AAAA”再次是我的价值!这个价值来自哪里?在DB中,此时没有这样的值!!我错了什么?
答案 0 :(得分:0)
保存模型应该在post操作中发生,并永久保存模型,因此您应该将其保存到数据库,这需要您将模型映射到数据库表,为此,您应该创建一个数据库和创建一个保存模型数据的表,然后使用Entity框架或任何其他ORM将模型映射到数据库表。
更新1:
您将模型保存到数据库中的两个位置,首先是get动作,然后是post动作,所以每次保存&#34; BBB&#34;在post动作中,它将在get动作中被覆盖到&#34; AAAA&#34;,所以这里是你的代码应该如何:
public class TestController : Controller
{
TestEntities dbModel = new TestEntities();
public ActionResult Index(int? id)
{
MyEntity model = new MyEntity();
if (id.HasValue)
model = dbModel.MyEntity.First(m => m.Id == (id ?? 0));
return View(model);
}
[HttpPost]
public ActionResult Index(MyEntity model)
{
dbModel.MyEntity.Add(model);
dbModel.SaveChanges();
return RedirectToAction("Index", new { id = model.Id });
}
}
如果您看到只在post操作中将数据保存到数据库,则get操作是从数据库中恢复数据。