Автоматическая привязка свойства «XElement» в ASP.NET MVC

StackOverflow https://stackoverflow.com/questions/874118

  •  22-08-2019
  •  | 
  •  

Вопрос

У меня есть действие «Редактировать» и представление «Редактировать», позволяющее пользователям обновлять определенный объект в базе данных.

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

На мой взгляд, я визуализирую текстовую область из вывода свойства "ToString()" следующим образом:

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

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

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

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

Это было полезно?

Решение

Для этого вы можете написать специальную связку, реализующую IModelBinder интерфейс.Вы можете зарегистрировать этот связующий элемент в самом методе:

public ActionResult Edit([ModelBinder(typeof(XElementBinder))] XElement element)
{ ... }

или глобально для всех XElementв вашем приложении, зарегистрировав подшивку в 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