Asp.net mvc MVC剃须刀表单提交不起作用
我正在尝试使用一个简单的表单,允许授权用户修改我正在构建的MVC3 Razor站点上选定页面上的内容。但我无法正确发布编辑表单 我的模型如下: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
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; }