4

您好
,我正在处理 ASP.Net MVC 3 项目,并收到一个名为“找不到资源”的错误我的情况是我有
1:我正在使用自己的视图并在操作中返回它们,例如我手动创建了一个视图,首先称为“ 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 Studios 脚手架模板时,CURD 操作的最佳方式是什么,即我走对了吗?我想要我自己的视图,然后根据它们编写我的控制器,而不是像 Visual Studio 那样首先编写控制器,然后右键单击“添加视图”

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

4

1 回答 1

2

简而言之,您将需要两者,您需要一个 [HttpGet] 操作来返回用户可以输入值的初始表单,然后是一个 [HttpPost] 版本来执行持久性。然后从这个 [HttpPost] 方法中,您应该 RedirectToAction (return 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 方法的路由约束(请参见此处

于 2013-04-10T21:49:52.720 回答