このようにモデルでHtmlStringプロパティを使用しています
public HtmlString Html { get; set; }
次に、レンダリングするEditorTemplateとhtmlエディターがありますが、TryUpdateModel()を使用すると、型コンバーターがこれらの型StringとHtmlStringの間で変換できないため、InvalidOperationExceptionが発生します。
カスタムモデルバインダーを作成する必要がありますか、それとも別の方法がありますか?
アップデート:
モデルでHtmlStringを使用しようとしていますが、これは主に、モデルにHTMLが含まれていることを明確にするためです。だからこれは私の完全なモデルがどのように見えるかです:
public class Model {
public HtmlString MainBody { get; set; }
}
これが私がフォームをレンダリングする方法です:
@using (Html.BeginForm("save","home")){
@Html.EditorForModel()
<input type="submit" name="submit" />
}
MainBodyフィールドをテキストエリアとしてレンダリングできるように、Object.cshtmlという独自のエディターテンプレートを作成しました。
私のコントローラーには、次のような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にはMainBodyのみが含まれ、MainBody.MainBodyは含まれないため、bindingContextから完全なModelNameを取得する方法がわかりません。
私はこれに関する他の解決策にも興味があります、あるいは誰かがそれが本当に悪い考えだと思うなら。