私は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 などのリッチ オブジェクトに対して同じ方法を想像してみてください。どちらを選択すればよいでしょうか。それとも何か他の方法がありますか?