MVC Razor表单提交无效

时间:2013-01-30 01:53:20

标签: asp.net-mvc razor

我正在尝试使用一个简单的表单,允许授权用户修改我正在构建的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个单独的值 - 一个用于模型中的每个属性,而不是将模型类传递回控制器。我无法弄清楚我需要改变什么以使其正常工作。

我希望我错过了一些简单的东西,而且眼睛更好的人可以看到它是什么。

3 个答案:

答案 0 :(得分:3)

因此,在进一步研究ASP MVC如何将表单字段映射到模型类并检查发布到浏览器的HTML之后,我发现这是我的WebContent类中属性名称的问题。

public virtual String content { get; set; }

TinyMCE编辑器使用内容变量来定义与编辑器界面相关的某些特征。这显然导致编辑器中用户输入生成的HTML“内容”无法映射回Model属性。

只需更改模型类中属性的名称(当然也可以修复相应的数据库映射和视图引用),即可解决问题。

public virtual String web_data_content { get; set; }

其他所有内容都相同,这与UIHint和AllowHTML属性完美配合。

答案 1 :(得分:2)

在您的操作中添加此属性

[ValidateInput(false)]

这应该可以解决您的问题

答案 2 :(得分:0)

如果你使用ie7 这可能有些错误

<input type="submit" value="Update" /> 

给按钮命名