質問

私は、ユーザーがデータベース内の特定のエンティティを更新できるようにする「編集」アクションと「編集」ビューを持っています。

これは、データベースのタイプは、「XML」でだ、とのDataContext(私はLINQのツーSQL使用しています)タイプのプロパティ「のXElement」としてそれを表しています。

私の見解では、私はこのようなproperyの「ToStringメソッド()」出力からテキストエリアをレンダリングします:

<%= Html.TextArea("Text", Model.Text.ToString()) %>
オブジェクトからデータを引っ張ったときに

これは正常に動作しますが、私は戻って、新しいデータを投稿しようとすると、それは空白として戻ってきます。

私は、これは、自動バインダーは、タイプのXElementのプロパティに対処する方法を知らないからだと思います。

それがいることを適切に入ってくるデータをデシリアライズするので、この問題を解決するために、または何らかの形で自動バインダーの動作をカスタマイズする方法はありますか?

役に立ちましたか?

解決

あなたは<のhref =「http://msdn.microsoft.com/en-us/library/system.web.mvc.imodelbinder.aspx」のrel = "nofollowをnoreferrerを実装し、このためのカスタムバインダーを書くことができます「> IModelBinder のインターフェース。

:あなたは、メソッド自体にこのバインダーを登録することができます
public ActionResult Edit([ModelBinder(typeof(XElementBinder))] XElement element)
{ ... }

またはグローバルXElementであなたのバインダーをregistereingすることにより、アプリケーション内のすべてのGlobal.asax年代について:

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;
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top