Domanda

Ho un'azione "Modifica" e una visione "Modifica" per consentire agli utenti di aggiornare una certa entità nel database.

E 'tipo di database è "XML", e il DataContext (sto usando LINQ to SQL) rappresenta come una proprietà di tipo "XElement".

A mio parere, mi rendono un testo-area dalla "ToString ()" uscita del propery in questo modo:

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

Questo funziona bene quando si tira i dati dall'oggetto, ma quando provo ad inserire i nuovi dati indietro, si torna come vuota.

Credo che questo sia perché l'auto-legante non sa come comportarsi con una proprietà di tipo XElement.

C'è un modo per risolvere questo problema, o per personalizzare in qualche modo il comportamento della auto-legante in modo che deserializzi i dati in arrivo correttamente?

È stato utile?

Soluzione

È possibile scrivere un raccoglitore personalizzato per questo che implementa il IModelBinder interfaccia. È possibile registrare questo legante sul metodo stesso:

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

o globalmente per tutti s 'nell'applicazione da registereing tuo legante in XElement Global.asax:

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

Il raccoglitore personalizzato sarebbe simile a questa:

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;
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top