我正在尝试使用一个简单的表单来允许授权用户修改我正在构建的 MVC3 Razor 站点上的选定页面上的内容。我无法让编辑表单正确发布。
我的模型如下:
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 表明它传递了 4 个单独的值 - 我的模型中的每个属性一个,而不是将模型类传递回控制器。我不知道我需要更改什么才能使其正常工作。
我希望我错过了一些简单的东西,并且有更好眼睛的人可以看到它是什么。