在控制器中使用“HttpPost”时无法找到资源错误

时间:2013-04-06 19:08:46

标签: asp.net-mvc

您好我正在ASP.Net MVC 3项目上工作,我收到一个名为“资源无法找到”的错误我的情况是我有  1:am使用我自己的视图并在操作中返回它们,例如我首先手动创建了一个名为“Create.cshtml”的视图,然后手动将其添加到这样的动作中

[HttpPost]
 Public ActionResult CreateStudent(StudentIfo studentinfo)
{
 db.StudentInfo.add(studentinfo);
 db.SaveChanges();
Return View("~/Views/Student/Create.cshtml");
}

[HttpGet]在此之前行动很好但为什么不是HttpPost ???

我的路线图说:

routes.MapRoute(" ",
                "{controller}/{action}/{id}",
                new { controller = "Student", action = "CreateStudent", id = UrlParameter.Optional }
                );

2:每当我写[HttpPost]时我都会收到此错误,如果我将其删除,那么一切正常,如果这样的事情继续下去,那么如何保存数据?

3:我的Create.cshtml有一个@Html.BeginForm("CreateStudent","Student",FormMethod.Post)我没有得到问题是什么?我搜索了很多但没有得到一个好的答案。

4:当我们使用自己的视图而不是使用Visual studio脚手架模板时,CURD操作的最佳方法是什么,即我正确的方式?我想要自己的视图然后根据它们编写我的控制器而不是Visual Studio方式首先编写控制器然后右键单击“添加视图”

请推荐一些好方法或任何有关它的网站或教程。

1 个答案:

答案 0 :(得分:2)

简而言之,你需要两个,你需要一个[HttpGet]动作来返回用户可以输入值的初始形式,然后是[HttpPost]版本来执行持久性。从这个[HttpPost]方法开始,你应该使用RedirectToAction(返回RedirectToAction(...))来确保重新加载页面不会重新运行post操作。

所以:

[HttpGet]
public ActionResult CreateStudent()
{
    var viewModel = new CreateStudentViewModel { /* Set properties here or load data for it */ };
    return View(viewModel);
}

[HttpPost]
public ActionResult CreateStudent(PostedValues values)
{
    if (ModelState.IsValid)
    {
        // Create Student Here
        return RedirectToAction(/* Jump to a logical place with a Get */)
    }

    /* Initialize correct error viewModel again and show the create student screen with validation errors */
    return View(viewModel)
}

我个人将这些方法命名为GetCreateStudent和PostCreateStudent,并添加两条路由约束限制Http方法的路由(参见here