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

它的数据库类型是“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