私はMVCにかなり慣れていませんが、同じ結果を得るために2つのケースの最善かつ適切な方法をまだ混乱させています。一部のユーザーが特定のルート カテゴリに新しいサブカテゴリを追加する必要があるとします。
ケース 1: SubCategory は EF によってマップされたクラスであり、すべてのプロパティが null 可能ではありません。
コントローラー:
    [Authorize]
    public ActionResult Create()
    {
        SubCategory subCategory = new SubCategory();
        subCategory.RootCategoryID = 1;
        return View(subCategory);
    }
    [Authorize]
    [HttpPost]
    public ActionResult Create(SubCategory thisSubCategory)
    {
        if (ModelState.IsValid)
        {
           //And some BL logic called here to handle new object...
        }
    }
意見:
    @Html.HiddenFor(model => model.ID)
    @Html.HiddenFor(model => model.RootCategoryID)
    <h3>Sub Category Name: </h3>
    @Html.EditorFor(model => model.CategoryName)
    @Html.ValidationMessageFor(model => model.CtaegoryName)
    <input id="btnAdd" type="submit" value="Add" />
ケース 2: コントローラーのモデルとしてヘルパー クラスを追加し、ポスト後に EF オブジェクトを設定する
コントローラー:
    class SubCategoryHelper
    {
       public string Name { get; set; }
    }
    [Authorize]
    public ActionResult Create()
    {
       SubCategoryHelper subCategory = new SubCategoryHelper();
       return View(subCategory);
    }
    [Authorize]
    [HttpPost]
    public ActionResult Create(SubCategoryHelper thisSubCategory)
    {
        if (ModelState.IsValid)
        {
           SubCategory newSubCategory = new SubCategory();
           newSubCategory.RootCategoryID = 1;
           newSubCategory.CtaegoryName = thisSubCategory.Name;
           //And some BL logic called here to handle new object...
        }
    }
意見:
サブカテゴリ名:
    @Html.EditorFor(model => model.Name)
    @Html.ValidationMessageFor(model => model.Name)
    <input id="btnAdd" type="submit" value="Add" />
どちらの方法でも同じになりますが、最初の方法は、クライアント側で変更できる隠し要素があるため、安全性が低く見えます。Client や Product などのリッチ オブジェクトに対して同じ方法を想像してみてください。どちらを選択すればよいでしょうか。それとも何か他の方法がありますか?