【问题标题】:Auto-binding an "XElement" property in ASP.NET MVC在 ASP.NET MVC 中自动绑定“XElement”属性
【发布时间】:2009-05-17 08:02:54
【问题描述】:

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

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

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

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

这在从对象中提取数据时可以正常工作,但是当我尝试将新数据发回时,它会返回为空白。

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

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

【问题讨论】:

    标签: xml asp.net-mvc xelement


    【解决方案1】:

    您可以为此编写一个自定义绑定器来实现IModelBinder 接口。您可以在方法本身上注册此活页夹:

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

    或通过在Global.asax 中注册您的活页夹,为您的应用程序中的所有XElement 全局设置:

    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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多