Pregunta

Tengo un "Editar" acción y una vista "Editar" para permitir a los usuarios actualizar cierta entidad en la base de datos.

Es el tipo de base de datos es "XML" y el DataContext (estoy usando LINQ to SQL) representa como una propiedad de tipo "XElement".

En mi opinión, pagaré un texto-área de la "ToString ()" salida del hotel fenomenal como esto:

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

Esto funciona bien cuando se tira de los datos del objeto, pero cuando trato de publicar los nuevos datos de nuevo, vuelve en blanco.

Creo que esto es debido a que la auto-ligante no sabe cómo hacer frente a una propiedad de tipo XElement.

¿Hay una manera de solucionar este problema, o para personalizar de alguna manera el comportamiento del auto-ligante para que des-serializa los datos de entrada correctamente?

¿Fue útil?

Solución

Puede escribir una carpeta de encargo para este que implementa el IModelBinder interfaz. Puede registrar esta carpeta en el propio método:

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

o de forma global para todos XElement 's en su aplicación por registereing su carpeta de Global.asax:

ModelBinders.Binders[typeof(IPrincipal)] = new PrincipalModelBinder();

Su carpeta de encargo sería algo como esto:

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;
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top