Auto-vinculativo uma propriedade “XElement” em ASP.NET MVC
-
22-08-2019 - |
Pergunta
Eu tenho uma ação "Editar" e uma vista "Editar" para permitir aos usuários atualizar uma determinada entidade no banco de dados.
É do tipo de banco de dados é "XML", ea DataContext (estou usando o Linq-to-SQL) representa-lo como uma propriedade do tipo "XElement".
Em minha opinião, eu processar a-área de texto do "ToString ()" saída do propery assim:
<%= Html.TextArea("Text", Model.Text.ToString()) %>
Esta multa funciona quando puxando os dados do objeto, mas quando eu tento publicar o novo de volta os dados, ele volta como em branco.
Eu acho que isso é porque a auto-aglutinante não sabe como lidar com uma propriedade do tipo XElement.
Existe uma maneira de corrigir isso, ou de alguma forma personalizar o comportamento do auto-aglutinante para que ele de-serializa os dados recebidos corretamente?
Solução
Você pode escrever uma pasta feita sob encomenda para este que implementa a IModelBinder
interface. Pode registar esta pasta sobre o método em si:
public ActionResult Edit([ModelBinder(typeof(XElementBinder))] XElement element)
{ ... }
ou globalmente para todos XElement
está em seu aplicativo por registereing sua pasta em Global.asax
:
ModelBinders.Binders[typeof(IPrincipal)] = new PrincipalModelBinder();
A sua pasta feita sob encomenda seria algo parecido com isto:
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;
}
}