处理Http Post并获取相同的视图 - ASP.Net MVC Razor

时间:2014-09-08 13:12:29

标签: c# asp.net-mvc razor

我的视图有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 getpost method遵循不同的逻辑。使用get方法返回带有值的Model,并且需要保留此模型的状态,以使用post方法将相应的记录更新到数据库。

但是,当我使用post方法时,编译器会自动路由到我的模型类,寻找一个参数less constructor。我相信它正在创建我的模型类的新实例。

4 个答案:

答案 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());
}