0

以前は機能していたコードを変更していません。プロジェクトの以前のビルドでこれを明確にしました。ただし、次のエラーが表示されます。

パラメータ ディクショナリに、「BareCupboard.Controllers.RecipeStepController」のメソッド「System.Web.Mvc.ActionResult Create(Int32, BareCupboard.Models.RecipeStep)」の null 非許容型「System.Int32」のパラメータ「recipeID」の null エントリが含まれています。 '。オプションのパラメーターは、参照型または null 許容型であるか、オプションのパラメーターとして宣言する必要があります。パラメータ名: パラメータ

私のコードは次のとおりです。

[HttpPost]
    public ActionResult Create(int recipeID, RecipeStep newRecipeStep)
    {
        try
        {
            var recipe = db.Recipes.Single(r => r.recipeID == recipeID);
            recipe.RecipieSteps.Add(newRecipeStep);
            db.SaveChanges();
            return RedirectToAction("Index", "Recipe");
        }
        catch
        {
            return View();
        }
    }

私が試した:int?レシピIDですが、これは機能しません。私が見ることができるのはここでの神秘主義だけなので、何が起こったのかについてのアイデアはありません!

4

2 に答える 2

1

パラメーターの順序については、ビュー コードを確認してください。モデルバインダーは、適切な順序で来る必要があります。そこで間違いを犯しやすい。

アップデート

これを解決する1つの方法を次に示します。以下のようにビューモデルを作成します。

    public class RecipeViewModel
    {
       public int RecipeId { get; set; }
       public RecipeStep RecipeStep { get; set; }
    }

コントローラーには、次のものがあります。

    public ActionResult Create()
    {
        var recipeId = 10 // however you want to select that Id

        var recipeViewModel = new RecipeViewModel {RecipeId = 10}

        return View(recipeViewModel);
    }

  [HttpPost]
  public ActionResult Create(int recipeID, RecipeStep newRecipeStep)
  {
     //your code
  }

ビューでは、次のことができます。

@model MvcApplication3.Models.RecipeViewModel

@using (Html.BeginForm(null,null,FormMethod.Post))
{

 <div>
    <p>@Html.HiddenFor(x=>x.RecipeId) </p>
    <p>@Html.TextBox("RecipeStepData1")</p>
     <p>@Html.TextBox("RecipeStepData2")</p>
    <p>@Html.TextBox("RecipeStepData3")</p>
</div>
<input type="submit" value="Submit"  id="btn" /> 
}

順序に注意してください。最初に ID を配置し、次に残りのレシピ ステップ データを配置して、正しくバインドされるようにします。

開始フォームの場合、同じページで投稿を行っているため、アクションとコントローラーを指定する必要はありません。入れても痛くありません。

お役に立てれば... :)

于 2012-11-14T15:39:28.160 に答える
1

投稿されたデータでレシピ ID が null になっているのはなぜですか? それはあなたの問題であり、 ヌル可能ではないためvar recipe = db.Recipes.Single(r => r.recipeID == recipeID)取得できません。recipeID=nullr.recipeID

于 2012-11-14T15:29:18.237 に答える