Asp.net mvc MVC剃须刀表单提交不起作用

Asp.net mvc MVC剃须刀表单提交不起作用,asp.net-mvc,razor,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("ti

我正在尝试使用一个简单的表单,允许授权用户修改我正在构建的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>
我读到的所有内容都表明AllowHTML属性应该允许发布此内容,但这不是出于某种原因

我可以通过向HttpPost控制器方法添加[ValidateInput(false)]属性来解决这个问题。如果我这样做,那么这个异常就不会发生,但是模型仍然不会传递给控制器。它只是传递null。在调试器中检查HttpContext表明它正在传递4个单独的值—模型中的每个属性一个值,而不是将模型类传递回控制器。我想不出我需要改变什么才能使它正常工作

我希望这是我错过的一些简单的东西,如果你使用ie7,有更好的眼睛的人可以看到它是什么 这可能有一些错误

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


给按钮一个名称

在操作中添加此属性

[ValidateInput(false)]

这应该可以解决您的问题

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

public virtual String content { get; set; }
TinyMCE编辑器使用内容变量定义与编辑器界面关联的某些特征。这显然导致编辑器中用户输入生成的HTML“内容”无法映射回模型属性

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

public virtual String web_data_content { get; set; }

其他一切都相同,这与UIHint和AllowHTML属性完美配合。

同意。你的代码看起来很棒。必须有一些冲突的框架有什么方法来确定什么是“冲突的框架”吗?我已经阅读了巴萨姆上面提到的问题,但我认为我的项目中没有这样的内容。我以一个空的MVC 3项目作为起点,只添加了MySQL NET/Connector、NHibernate和TinyMCE。我认为这些都不应该导致表单出现这种问题。有什么方法可以判断吗?在我上面的描述中,我指出操作上的ValidateInput(false)确实消除了异常,但是我的模型仍然没有正确地传递给控制器。请看上面最后一段。我会记住浏览器支持,但我现在正在用FF测试。
public virtual String web_data_content { get; set; }