1

我有一个“编辑”操作和一个“编辑”视图,允许用户更新数据库中的某个实体。

它的数据库类型是“XML”,DataContext(我使用的是 Linq-to-SQL)将它表示为“XElement”类型的属性。

在我看来,我从属性的“ToString()”输出中渲染一个文本区域,如下所示:

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

从对象中提取数据时这很好用,但是当我尝试将新数据发回时,它会返回为空白。

我认为这是因为自动绑定器不知道如何处理 XElement 类型的属性。

有没有办法解决这个问题,或者以某种方式自定义自动绑定器的行为,以便正确反序列化传入的数据?

4

1 回答 1

2

您可以为此编写一个自定义绑定器来实现该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;
    }
}
于 2009-05-17T08:19:44.527 回答