単純なフォームを使用して、許可されたユーザーが、構築しているMVC3Razorサイトの選択したページのコンテンツを変更できるようにしようとしています。編集フォームを正しく投稿できません。
私のモデルは次のとおりです。
public class WebContent
{
public virtual UInt32 id { get; set; }
public virtual String page { get; set; }
public virtual String section { get; set; }
[UIHint("tinymce_jquery_full"), AllowHtml]
public virtual String content { get; set; }
}
私のコントローラー:
[Authorize]
public ActionResult Edit(String page, String section)
{
WebContent content = _WebContent.GetSection(page,section);
return View(content);
}
[Authorize]
[HttpPost]
public ActionResult Edit(WebContent content)
{
if (ModelState.IsValid)
{
_WebContent.Update(content);
return View("Index");
}
else return View("Index");
}
そして私の見解:
@model SongbirdsStudios.Models.WebContent
@{
ViewBag.Title = "Edit '"+Model.page+"'Page Content";
}
<div>
<h2>Edit</h2>
@using (Html.BeginForm())
{
<fieldset>
<legend>Page Content</legend>
@Html.HiddenFor(m => m.id)
@Html.HiddenFor(m => m.page)
@Html.HiddenFor(m => m.section)
<div class="editor-label">
Content
</div>
<div class="editor-field">
@Html.EditorFor(m => m.content)
</div>
<p>
<input type="submit" value="Update" />
</p>
</fieldset>
}
</div>
ビューは正しくレンダリングされ、期待される要素が表示されます。UIHint( "tinymce_jquery_full")が正しく取得され、TinyMCEエディターがページに表示されます。ただし、フォームを送信すると、例外が発生します。
System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client (content=...)
私が読んだすべてのことは、AllowHTML属性がこれを投稿できるようにする必要があることを示していますが、それは何らかの理由ではありません。
[ValidateInput(false)]属性をHttpPostコントローラーメソッドに追加することで、これを回避できます。そうすると、この例外は発生しませんが、モデルはコントローラーに渡されません。代わりにnullを渡すだけです。デバッガーでHttpContextを調べると、モデルクラスをコントローラーに戻す代わりに、モデルのプロパティごとに1つずつ、合計4つの個別の値が渡されていることがわかります。これを正しく機能させるために何を変更する必要があるのかわかりません。
私はそれが私が見逃した単純なものであり、より良い目を持つ誰かがそれが何であるかを見ることができることを望んでいます。