MCV4 の理解と知識を深めようとしています。
Product オブジェクトのプロパティ CategoryType を HttpPost のコントローラーに戻す最良の方法は何ですか。
すべてのプロパティを手で書き出す必要がないように、アプローチを探しています。現在、リフレクションを使用して Category タイプのプロパティを反復処理し、@Html.Hidden メソッドを使用して非表示の入力変数として追加しています。これは機能しますが、正しい方法で実行しているかどうかを知りたいです (ベストプラクティス)。
- @Html.HiddenFor メソッドを使用して、以下で行ったことを達成する方法を知りたいです。リフレクションからのプロパティ情報を使用してラムダ式を記述する方法がわかりません。
- Category オブジェクトをコントローラーに渡すことを処理するより良い方法はありますか? 私の見解は強く型付けされています。投稿で Product オブジェクトを返すことを知っている必要があります。
私は次のような複合型を持っています。
public class Product
{
[Key]
public int Id { get; set; }
[Required]
public string ProductName { get; set; }
public Category CategoryType { get; set; }
}
public class Category
{
[Key]
public int Id { get; set; }
[Required]
public string CategoryName { get; set; }
}
次のようにコントローラを使用
public class ProductController : Controller
{
//
// GET: /Product/
public ActionResult Index()
{
return View();
}
public ActionResult Add()
{
//Add a new product to the cheese category.
var product = new Product();
var category = new Category { Id = 1, CategoryName = "Cheese" };
product.CategoryType = category;
return View(product);
}
[HttpPost]
public ActionResult Add(Product product)
{
if (ModelState.IsValid)
{
//Add to repository code goes here
//Redirect to Index Page
return RedirectToAction("Index");
}
return View(product);
}
}
そして、追加ビューで
@model BootstrapPrototype.Models.Product
@{
ViewBag.Title = "Add";
}
<h2>Add</h2>
@using (Html.BeginForm())
{
@Html.DisplayFor(m => m.ProductName);
@Html.EditorFor(m => m.ProductName);
foreach(var property in Model.CategoryType.GetType().GetProperties())
{
//I know how to use the Hidden but would also know how to use the HiddenFor with reflections.
@Html.Hidden("CategoryType." + property.Name, property.GetValue(Model.CategoryType));
}
<button type="submit">Add</button>
}
ありがとう。