在 ASP.NET MVC 中自动绑定“XElement”属性
-
22-08-2019 - |
题
我有一个“编辑”操作和一个“编辑”视图,允许用户更新数据库中的某个实体。
它的数据库类型是“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;
}
}
不隶属于 StackOverflow