我有一个页面创建表单,使用Page class
类别:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using System.Globalization;
using SpringHealthOne.SpringWS;
using System.Configuration;
using System.ComponentModel.DataAnnotations.Schema;
namespace SpringHealthOne.Models
{
public class Page
{
public int PageID { get; set; }
[Required]
public string Title { get; set; }
[NotMapped]
public MvcHtmlString PageBody { get; set; }
public string Body
{
get { return PageBody.ToHtmlString(); }
set { PageBody = new MvcHtmlString(value); }
}
public string MetaTitle { get; set; }
public string MetaDescription { get; set; }
public string Keywords { get; set; }
public bool Published { get; set; }
}
}
表单本身很简单,它包含一个添加了Ckeditor的textarea。当我最初尝试保存字段时,我得到了不安全的输入错误(HTML),所以我在方法中添加了[ValidateInput(false)]
:
[ValidateInput(false)]
[HttpPost]
public ActionResult Edit(Page page)
{
if (ModelState.IsValid)
{
db.Entry(page).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(page);
}
我不再获得异常,但ModelState.IsValid始终设置为false,我得到以下错误:
The value '<HTML STRING>' is invalid.
有人能指出我正确的方向吗?我是C#的新手,更多是MVC4
答案 0 :(得分:1)
我认为AllowHtmlAttribute
正是您所寻找的。您可以像这样使用它:
[AllowHtml]
public string Body { get; set; }
这允许您在字符串中使用HTML标记,因为它会跳过此属性的模型验证。您不应该需要ValidateInput
属性。我认为无论如何都不要使用它,因为它会跳过整个模型的验证,这可能会导致ModelState.IsValid
属性为false
,因为您跳过了验证。另请参阅this article。