我的视图有2个标签2个文本框和一个按钮。
这是我的控制器:
public ActionResult Create()
{
// Custom model that holds values
// this is to set the default values to the text boxes
return View(model);
}
[HttpPost]
public ActionResult Create(CustomModel viewModel )
{
try
{
// TODO: Add insert logic here
// The button should trigger this method to perform update
return RedirectToAction("Create");
}
catch
{
return View();
}
}
当我运行程序时,它会自动转到我的模型,该模型不包含任何值并抛出空指针异常。关于如何保持模型状态的任何想法。 ?
更新:
我使用的是经典的ADO.Net模型,而不是实体框架。
http get
和post method
遵循不同的逻辑。使用get方法返回带有值的Model,并且需要保留此模型的状态,以使用post方法将相应的记录更新到数据库。
但是,当我使用post方法时,编译器会自动路由到我的模型类,寻找一个参数less constructor。我相信它正在创建我的模型类的新实例。
答案 0 :(得分:0)
您可以在视图中进行验证,然后使用ModelState.IsValid
属性,如下面的代码所示: -
[HttpPost]
public ActionResult Create(CustomModel viewModel )
{
if (ModelState.IsValid)
{
////Insert logic here
return RedirectToAction("Create");
}
return View(viewModel);
}
答案 1 :(得分:0)
不完全确定我关注,但您可以从POST操作返回相同的视图,传入模型。这将保留模型数据。
[HttpPost]
public ActionResult Create(CustomModel viewModel )
{
try
{
// TODO: Add insert logic here
// The button should trigger this method to perform update
// Return "Create" view, with the posted model
return View(model);
}
catch
{
// Do something useful to handle exceptions here.
// Maybe add meaningful message to ViewData to inform user insert has failed?
return View(model);
}
}
答案 2 :(得分:0)
你的"获取"方法返回的代码中没有出现的模型(来自您在此处显示的内容)。以下是让您的行动接受GET& amp; POST。
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
public ActionResult Create(CustomModel viewModel)
{
try
{
// TODO: Add insert logic here
// The button should trigger this method to perform update
return RedirectToAction("Create");
}
catch
{
return View();
}
}
答案 3 :(得分:0)
您必须create new instance
方法中Action Result
。
public ActionResult Create()
{
// Assuming - First Time this ActioResult will be called.
// After your other operations
CustomModel model = new CustomModel();
// Fill if any Data is needed
return View(model);
// OR - return new instance model here
return View(new CustomModel());
}