2009-05-17 14 views
1

私は、ユーザーがデータベース内の特定のエンティティを更新できるようにするために、「編集」アクションと「編集」ビューを持っています。ASP.NET MVCの「XElement」プロパティの自動バインド

データベースの種類が「XML」で、DataContext(Linq-to-SQLを使用しています)が「XElement」型のプロパティとしてそれを表しています。オブジェクトからデータを引っ張ったときにこれが正常に動作しますが、私はしようとすると、

<%= Html.TextArea("Text", Model.Text.ToString()) %> 

:私の見解では

は、私はこのようなproperyの「ToStringメソッド()」出力からテキストエリアをレンダリング新しいデータをポストするには、それが空白に戻ります。

これは、自動バインダーがXElement型のプロパティを処理する方法を知らないためだと思います。

これを修正する方法や、自動バインダの動作をカスタマイズして、受信データを正しくシリアル化しないようにする方法はありますか?

答えて

2

IModelBinderインターフェイスを実装するカスタムバインダーを書くことができます。あなたはこの方法自体にこのバインダーを登録できます。

アプリケーション内のすべての XElement「sの
public ActionResult Edit([ModelBinder(typeof(XElementBinder))] XElement element) 
{ ... } 

またはグローバルGlobal.asaxであなたのバインダーをregistereingによって:

ModelBinders.Binders[typeof(IPrincipal)] = new PrincipalModelBinder(); 

カスタムバインダーは、このようになります。

public class XElementModelBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, 
          ModelBindingContext bindingContext) 
    { 
     string text = controllerContext.HttpContext.Request.Form["Text"]; 
     XElement element = ...; 
     // Get XElement instance from posted data. 
     return element; 
    } 
} 
+0

アドバイスをいただき、ありがとうございました。 – Jonathan

関連する問題