【发布时间】:2024-05-21 23:05:02
【问题描述】:
我正在像这样在我的模型上使用 HtmlString 属性
public HtmlString Html { get; set; }
然后我有一个可以呈现的 EditorTemplate 和 html 编辑器,但是当我使用 TryUpdateModel() 时,我得到一个 InvalidOperationException,因为没有类型转换器可以在这些类型 String 和 HtmlString 之间进行转换。
我需要创建自定义模型绑定器还是有其他方法?
更新:
我正在尝试在我的模型上使用 HtmlString,主要是为了让它明显包含 HTML。 所以这就是我的完整模型的样子:
public class Model {
public HtmlString MainBody { get; set; }
}
这就是我呈现表单的方式:
@using (Html.BeginForm("save","home")){
@Html.EditorForModel()
<input type="submit" name="submit" />
}
我创建了自己的编辑器模板,名为 Object.cshtml,以便可以将 MainBody 字段呈现为文本区域。
我的控制器有一个如下所示的 Save 方法:
public void Save([ModelBinder(typeof(FooModelBinder))]Model foo) {
var postedValue = foo.MainBody;
}
如您所见,我一直在使用如下所示的自定义模型绑定器:
public class FooModelBinder : DefaultModelBinder {
protected override object GetPropertyValue(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor, IModelBinder propertyBinder) {
if (propertyDescriptor.PropertyType == typeof(HtmlString)) {
return new HtmlString(controllerContext.HttpContext.Request.Form["MainBody.MainBody"]);
}
return null;
}
}
这按预期工作,但我不知道如何从 bindingContext 获取完整的 ModelName,因为 bindingContext.ModelName 只包含 MainBody 而不是 MainBody.MainBody?
我也对其他解决方案感兴趣,或者如果有人认为这是一个非常糟糕的主意。
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 model-binding