Asp.net mvc 使用标记保存文本时出现错误
我正在使用EF4.0开发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
放入地址字段,但在保存它时会出现以下错误,如何解决
潜在危险的请求。从客户端检测到表单值(地址=“
”)
编辑
请检查下面的代码
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("<", "<").Replace(">", ">");
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("<", "<").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");
}