ASP.NET MVCで「XElementの」プロパティの自動バインディング
-
22-08-2019 - |
質問
私は、ユーザーがデータベース内の特定のエンティティを更新できるようにする「編集」アクションと「編集」ビューを持っています。
これは、データベースのタイプは、「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;
}
}
所属していません StackOverflow