4

こんにちは
ASP.Net MVC 3プロジェクトに取り組んでおり、「リソースが見つかりません」というエラーが発生
しています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 の方法ではなく、それらに従ってコントローラーを作成し、最初にコントローラーを作成してから、[Add-View] を右クリックします。

良い方法や、それに関するサイトやチュートリアルをお勧めしてください。

4

1 に答える 1

2

つまり、ユーザーが値を入力できる初期フォームを返す [HttpGet] アクションと、永続化を行う [HttpPost] バージョンの両方が必要です。この [HttpPost] メソッドから RedirectToAction (return RedirectToAction(...)) を実行して、ページのリロードによってポスト操作が再実行されないようにする必要があります。

そう:

[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 メソッドを制限するルート制約を持つ 2 つのルートを追加します (こちらを参照) 。

于 2013-04-10T21:49:52.720 に答える