我像这样在我的模型上使用 HtmlString 属性
public HtmlString Html { get; set; }
然后我有一个呈现和 html 编辑器的 EditorTemplate,但是当我使用 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?
我也对其他解决方案感兴趣,或者如果有人认为这是一个非常糟糕的主意。