0

我正在使用 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; }
      }
}
4

3 回答 3

0

请检查以下代码

命名空间实体

{

[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; }

  }

}

于 2012-08-28T05:41:43.510 回答
0

@YograjGupta 给了你一个很好的答案,我不确定为什么[AllowHtml]不起作用。另一个选项是在控制器中,如果您将 保存EmployeeMetaData到数据库中,您可以 db.Configuration.ValidateOnSaveEnabled = false;在保存更改之前添加 ,。您还必须删除该if(ModelState.IsValid)部分。

另一种选择是将<and>替换为employeeMetaData.Address.Replace("<", "&lt;").Replace(">", "&gt;")

请记住,如果您使用该[AllowHtml]属性,它会使您更容易受到黑客攻击,因此您可能希望在最终发布之前将其删除。或者您可以添加Microsoft.Security.Application并执行一些操作,例如Sanitizer.GetSafeHtmlFragment(address)删除不安全的 html。

编辑

您的控制器应如下所示:

public ActionResult Create(Employee employee)
{
    employee.Address = employee.Address.Replace("<", "&lt;").Replace(">", "&gt;");
    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 表。

于 2012-08-28T05:51:16.443 回答
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. 检查您的程序集版本以应用它。

于 2012-08-28T05:19:06.007 回答