我正在使用EF 4.0开发MVC应用程序。
我正在尝试将值<test>
放到地址字段中,但在保存时会出现以下错误,如何解决?
从客户端检测到一个潜在危险的Request.Form值(Address =“<test>
”)。
修改
请检查以下代码
namespace CEntities
{
[MetadataType(typeof(EmployeeMetaData))]
public partial class Employee
{
}
/// <summary>
/// Holds the validations for Employee class
/// </summary>
public class EmployeeMetaData
{
[Key]
public int Id { get; set; }
[Required]
[StringLength(50, ErrorMessage = "First name can accept maximum 50 characters.")]
public string FirstName { get; set; }
[StringLength(50, ErrorMessage = "Last name can accept maximum 50 characters.")]
public string LastName { get; set; }
[StringLength(1000, ErrorMessage = "Address can accept maximum 1000 characters.")]
public string Address { get; set; }
}
}
答案 0 :(得分:0)
您可以使用ValidateInput(false)
关闭Request Validation
,也可以将[AllowHtml]
属性添加到模型属性
已修改:
在地址模型属性上添加[AllowHtml]
属性。
[StringLength(1000, ErrorMessage = "Address can accept maximum 1000 characters.")]
[AllowHtml]
public string Address { get; set; }
并在顶部添加using System.Web.Mvc;
指令。
您使用的是Assembly System.Web.Mvc.dll,版本4还是版本2.
[AllowHtml]
属性位于Assembly System.Web.Mvc.dll, version 4
。检查你的程序集版本以应用它。
答案 1 :(得分:0)
请检查以下代码
命名空间CEntities
{
[MetadataType(typeof(EmployeeMetaData))]
公共部门班员工
{
}
/// <summary> /// Holds the validations for Employee class /// </summary> public class EmployeeMetaData { [Key] public int Id { get; set; } [Required] [StringLength(50, ErrorMessage = "First name can accept maximum 50 characters.")] public string FirstName { get; set; }
[StringLength(50, ErrorMessage = "Last name can accept maximum 50 characters.")]
public string LastName { get; set; }
[StringLength(1000, ErrorMessage = "Address can accept maximum 1000 characters.")]
public string Address { get; set; }
}
}
答案 2 :(得分:0)
@YograjGupta给了你一个很好的答案,我不确定为什么[AllowHtml]
不起作用。另一个选项是在控制器中,如果将EmployeeMetaData
保存到数据库,则可以在保存更改之前添加db.Configuration.ValidateOnSaveEnabled = false;
。您还必须删除if(ModelState.IsValid)
部分。
另一种选择是将<
和>
替换为employeeMetaData.Address.Replace("<", "<").Replace(">", ">")
请注意,如果您使用[AllowHtml]
属性,则会使您更容易受到黑客攻击,因此您可能希望在最终版本发布之前将其删除。或者您可以添加Microsoft.Security.Application
并执行Sanitizer.GetSafeHtmlFragment(address)
之类的操作来移除不安全的HTML。
修改强>
您的控制器应如下所示:
public ActionResult Create(Employee employee)
{
employee.Address = employee.Address.Replace("<", "<").Replace(">", ">");
if(ModelState.IsValid)
{
db.Employees.Add(employee);
db.SaveChanges();
return RedirectToAction("Index");
}
}
或者你可以试试这个:
public ActionResult Create(Employee employee)
{
db.Configuration.ValidateOnSaveEnabled = false;
db.Employees.Add(employee);
db.SaveChanges();
return RedirectToAction("Index");
}
db
是您的数据库,Employee
是您数据库中的Employee表。