Asp.net mvc 使用标记保存文本时出现错误

Asp.net mvc 使用标记保存文本时出现错误,asp.net-mvc,entity-framework-4,Asp.net Mvc,Entity Framework 4,我正在使用EF4.0开发MVC应用程序 我试图将值,放入地址字段,但在保存它时会出现以下错误,如何解决 潜在危险的请求。从客户端检测到表单值(地址=“”) 编辑 请检查下面的代码 namespace CEntities { [MetadataType(typeof(EmployeeMetaData))] public partial class Employee { } /// <summary> /// Holds the va

我正在使用EF4.0开发MVC应用程序

我试图将值,
放入地址字段,但在保存它时会出现以下错误,如何解决

潜在危险的请求。从客户端检测到表单值(地址=“
”)

编辑


请检查下面的代码

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; }
      }
}
名称空间百分位数
{
[元数据类型(typeof(EmployeeMetaData))]
公共部分类雇员
{
}
/// 
///保存Employee类的验证
/// 
公共类EmployeeMetaData
{
[关键]
公共int Id{get;set;}
[必需]
[StringLength(50,ErrorMessage=“名字最多可以接受50个字符。”)]
公共字符串名{get;set;}
[StringLength(50,ErrorMessage=“姓氏最多可接受50个字符)。]
公共字符串LastName{get;set;}
[StringLength(1000,ErrorMessage=“地址最多可接受1000个字符。”)]
公共字符串地址{get;set;}
}
}

您可以使用
ValidateInput(false)
关闭
请求验证
,也可以向模型属性添加
[allowtml]
属性

已编辑

在地址模型属性上添加
[allowtml]
属性

[StringLength(1000, ErrorMessage = "Address can accept maximum 1000 characters.")]
[AllowHtml]
public string Address { get; set; }
使用System.Web.Mvc添加
指令在顶部

您使用的是汇编System.Web.Mvc.dll,版本4还是版本2


[allowtml]
属性位于第4版的
Assembly System.Web.Mvc.dll中。请检查您的程序集版本以应用此代码。

请检查下面的代码

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; }
      }
}
名称空间百分位数

{

公共部分类雇员

{



}

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

另一个选项是将
替换为
employeeMetaData.Address.replace(“,”)

请记住,如果您使用
[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");
    }
}

db
是您的数据库,
Employee
是您数据库中的Employee表。

谢谢……但我无法添加[allowtml]。它给出了错误。找不到类型或命名空间名称“AllowHtml”(是否缺少using指令或程序集引用?)。找不到类型或命名空间名称“AllowHtml”(是否缺少using指令或程序集引用?)是否添加了
using System.Web.Mvc指令?是的,仍然不起作用,所有其他DataAnnotation都起作用,但这一个不起作用。您是否按照我在更新答案中发布的内容进行了更改。如果是,那么是否会出现编译错误?删除此项(单击答案下的删除链接),因为这是对您的问题的更新,而不是答案。它已添加到您的问题中。通常您只需单击问题下方的
edit
,即可添加到问题中。谢谢Garrett和Yograj。我想,加勒特是对的。实际上,我正在测试我的应用程序,我遇到了这样一种情况:用户可以将文本放在角括号内,而不是每次都有一些html标记,但角括号内的任何内容都应该是可以接受的,所以我尝试插入它。@Yograj和@Garrett,我如何使用下面的代码?employeeMetaData.Address.Replace(“,”)?@nilesh1对于包含
@Garrett的字符串,在类/控制器或视图中放置此代码的位置?我已在Employee controller中添加了以下代码,但在CURSOR出现之前会出现错误<代码>员工.地址.替换(“,”);db.Employees.Add(员工);db.SaveChanges()
     [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; }

  }
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");
}