1

編集ページがあり、フォームが送信されると、ユーザーをインデックス ページにリダイレクトするのではなく、ページを更新しています。そのために、項目の ID を一時変数に保存し、それを使用して、一時変数 ID を使用してユーザーを編集ページにリダイレクトします。このようなもの:

[HttpGet]
public ActionResult Edit(Guid id)
{
    TempData["CategoryID"] = id;
    Category c = new CategoriesBL().GetCategory(id);
    return View(c);
}

[HttpPost]
public ActionResult Edit(Category c)
{
    new CategoriesBL().UpdateCategory(c);
    return RedirectToAction("Edit", (Guid)TempData["CategoryID"]);
}

それはうまくいっています。ただし、同じページの別のフォームに 2 つのメソッドがあり、これら 2 つのメソッドのいずれかを送信すると、リダイレクトが機能せず、例外が発生します。

機能していない方法の 1 つ:

[HttpPost]
public ActionResult AddNewThumbnail()
{
    List<byte[]> thumbs = new List<byte[]>();

    for (int i = 0; i < Request.Files.Count; i++)
    {
        thumbs.Add(ConvertToByteArray(Request.Files[i].InputStream));
    }

    new CategoriesBL().AddCategoryThumbnail(thumbs, (Guid)TempData["CategoryID"]);
    return RedirectToAction("Edit", (Guid)TempData["CategoryID"]);
}

例外:

パラメーター ディクショナリには、null 非許容型 'System.Guid' のパラメーター 'id' の null エントリが含まれています....

ルーティングの問題だと思いますが、実際には同じ実装が使用されており、一方のフォームでは機能していて、もう一方のフォームでは機能していません。私が何か間違ったことをしているのか、それともこれを行うためのより良い方法があるのか​​ どうかはわかりません。

注: コードを数回デバッグしましたが、メソッドに渡す ID には値が含まれています。ただし、ページがリロードされると、URL には ID がありません。

デバッグ

問題は、私が使用しているさまざまなフォームが原因のようです。テキストを編集している最初のフォームは次のようになります。

@using (Html.BeginForm()) {
    // ....
}

2番目のフォームでは、画像を保存してアップロードしているため、フォームは異なる必要があります

@using (Html.BeginForm("AddNewThumbnail", "Category", FormMethod.Post, new { enctype = "multipart/form-data" })) {
    // ....
}

どういうわけか、フォームを「通常の」フォームに変更すると、すべてが機能しました。ただし、このフォームから画像を保存したいので、もちろん使用できません。

4

2 に答える 2