2009-05-17 2 views
1

У меня есть действие «Изменить» и «Изменить», чтобы разрешить пользователям обновлять определенный объект в базе данных.Автоматическое связывание свойства «XElement» в ASP.NET MVC

Это тип базы данных «XML», а DataContext (я использую Linq-to-SQL) представляет его как свойство типа «XElement».

На мой взгляд, я сделать текстовую область от «ToString()» выход Собственость, как это:

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

Это прекрасно работает при натяжении данных от объекта, но когда я пытаюсь для публикации новых данных он возвращается как пустой.

Я думаю, это связано с тем, что автосвязь не знает, как иметь дело с свойством типа XElement.

Есть ли способ исправить это или каким-то образом настроить поведение автоматического связующего, чтобы он правильно сериализовал входящие данные?

ответ

2

Вы можете написать настраиваемое связующее для этого, которое реализует интерфейс 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; 
    } 
} 
+0

Спасибо за совет, работал безупречно. – Jonathan