问题描述
一对编程会话后,一个有趣的问题上来,我想我知道答案。
问:是否有在ASP.NET MVC中任何其它所需的方式比写入数据库或文本文件,保留国家等。
?我要在这里定义状态,以表示我们的人对象的集合,我们创建了一个新的,并转到另一页,并期望看到新创建人。 (所以没有阿贾克斯)
我的想法是,我们不希望任何功夫的ViewState或其他机制,这个框架是要回去无国籍网页。
The example you provided is pretty easy to do without any sort of "view state kung fu" using capabilities that are already in MVC. "User adds a person and sees that on the next screen." Let me code up a simple PersonController
that does exactly what you want:
public ActionResult Add()
{
return View(new Person());
}
[HttpPost]
public ActionResult Add(PersonViewModel myNewPersonViewModel)
{
//validate, user entered everything correctly
if(!ModelState.IsValid)
return View();
//map model to my database/entity/domain object
var myNewPerson = new Person()
{
FirstName = myNewPersonViewModel.FirstName,
LastName = myNewPersonViewModel.LastName
}
// 1. maintains person state, sends the user to the next view in the chain
// using same action
if(MyDataLayer.Save(myNewPerson))
{
var persons = MyDataLayer.GetPersons();
persons.Add(myNewPersion);
return View("PersonGrid", persons);
}
//2. pass along the unique id of person to a different action or controller
//yes, another database call, but probably not a big deal
if(MyDataLayer.Save(myNewPerson))
return RedirecToAction("PersonGrid", ...etc pass the int as route value);
return View("PersonSaveError", myNewPersonViewModel);
}
Now, what I'm sensing is that you want person on yet another page after PersonSaveSuccess
or something else. In that case, you probably want to use TempData[""]
which is a single serving session and only saves state from one request to another or manage the traditional Session[""]
yourself somehow.
What is confusing to me is you're probably going to the db to get all your persons anyway. If you save a person it should be in your persons collection in the next call to your GetPersons()
. If you're not using Ajax, than what state are you trying to persist?
这篇关于ASP.NET MVC - 国家与建筑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!