ASP.NET MVC の Bind 属性は何のためにあるのか?
ASP.NET MVC 5 で Entity Framework の Model と連携させて MVC テンプレートを作ると、
public ActionResult Create([Bind(Include="Id,分類,商品名,単価,数量")] 商品 商品)
な感じで、Create メソッドに Bind 属性が付いてくる。
MSDN のヘルプを見ると
BindAttribute.Include プロパティ (System.Web.Mvc)
http://msdn.microsoft.com/ja-jp/library/system.web.mvc.bindattribute.include(v=vs.108).aspx
のようにバインドするプロパティを指定するらしいのだが、これって、
・そもそもフォームから送ってくるバインド先は、名前が同じでないと無理だろう。
・送信されるパラメータとバインドは、Model クラスのプロパティのほうが良いのではないか?
と思ったのだが、どうなんでしょう?
で、実際 EF を使って、Entity Data Model を作ってみると、実は、このプロパティに属性をつけることが困難なことがわかる。Model1.edmx をデータベースから作成した後に、このクラス自体を弄ることが難しいわけ。なそうなると、モデル自体に属性をつけるのは不可能なので、「フォームから送られてくるパラメータ」と「モデルが持つプロパティ」の結び付けは、先のようなコントローラーの Create アクションメソッドで設定しないとダメ、ってのがこの Bind 属性の正体なのかな?と思ったり。
ちなみに、モデルクラスを直接弄って属性をつける方法は、逆引きで書いたので後でブログにもで詳細を書く?