c# - ASP.NET MVC 5 - 模型中有 HTML 内容的奇怪行为
问题描述
我正在开发基于 ASP.NET MVC 5 的功能来管理呈现为 html 的消息模板。在 viewmodel 中有 html-markup 会导致一些问题。
这些消息模板通过所见即所得编辑器进行编辑。
这是控制器的基本示例:
public class BlackboardController : Controller
{
public ActionResult Template()
{
return View(new RichTextEditorViewModel()
{
Message = "<h1>I'm a headline</h1><p>I'm a regular text...</p>"
});
}
[HttpPost]
public ActionResult Template(RichTextEditorViewModel model)
{
if (!ModelState.IsValid)
return View(model);
return RedirectToAction("Template");
}
}
模型的基本示例:
public class RichTextEditorViewModel
{
[Required]
[Display(Name = "Template name")]
public string TemplateName { get; set; }
[AllowHtml]
[Display(Name = "Message")]
public string Message { get; set; }
}
部分视图
@using (Html.BeginForm("Template", "Blackboard", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
<div class="form-group">
<label class="col-md-4 control-label">Message </label>
<div class="col-md-8">
<div class="input-group">
@Html.TextAreaFor(m => m.Message, new { rows = "20", style = "resize:none;width:400px;", placeholder = Html.DisplayNameFor(m => m.Message), @class = "form-control input-lg textarea-editor" })
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save template" class="btn btn-default" />
</div>
</div>
}
当我将 html 标记发布到控制器操作时,一切正常。为了完成这项工作,我必须使用 AllowHtml 属性来装饰包含标记的模型属性。
但是:如果 ModelState 无效,例如 TemplateName 为空,那么我仍然会这样HttpRequestValidationException
说:
“从客户端检测到潜在危险的 Request.Form 值”
我无法使用该基本示例重现该行为,但它发生在我更复杂的 Web 应用程序中。在某些站点上,我发现了这样的信息,即如果有任何东西触及控制器或视图的请求属性的属性,则会引发异常。试图解决这个问题,但似乎没有帮助。此外,我不知道哪些组件实际上正在访问请求或包含对该请求的引用。
怎么可能,如果 ModelState 有效,我就不会看到这个异常。HttpRequestValidationException
当 ModelState 无效时,它怎么会被抛出。
解决方案
推荐阅读
- r - rhandsontable 的渲染器使表格变慢/迟缓。有什么修复吗?
- dart - Why do I need to spread operator in the getter method?
- python - Google Cloud Functions 在数千次正确响应后返回 401 错误
- mongodb - 在 Mongodb 查询中将月份从数字转换为字符串问题
- google-apps-script - Google Apps 脚本:在创建表单期间设置默认答案
- spring - ConfigServletWebServerApplicationContext:如何从 Spring Maven 项目中卸载 Flyway
- rust - 封装一个对象和一个使用其生命周期的引用
- python - 如何使用 Python (pandas) 将文本文件格式化/解析为 CSV
- grafana - 读取 k8s configmap 数据并使用 grafana 进行可视化
- java - 未调用客户授权标头过滤器