Asp.net mvc 3 ASP.NET MVC AllowHtml bug或其他我不知道的东西';不能正确使用
我的模型包含一个名为“longdescription”的字符串字段,它获取tinymce编辑器内容的值Asp.net mvc 3 ASP.NET MVC AllowHtml bug或其他我不知道的东西';不能正确使用,asp.net-mvc-3,Asp.net Mvc 3,我的模型包含一个名为“longdescription”的字符串字段,它获取tinymce编辑器内容的值 Public class ArticleModel:BaseModel{ [StringLength(8000, ErrorMessage = "Long description must be in 8000 characters or less"), AllowHtml] public string LongDescription { get; set; }
Public class ArticleModel:BaseModel{
[StringLength(8000, ErrorMessage = "Long description must be in 8000 characters or less"), AllowHtml]
public string LongDescription { get; set; }
}
这是我的控制器代码
[HttpPost]
public ActionResult AddEdit(ArticleModel model)
{
string buttonName = Request.Form["Button"];
if (buttonName == "Cancel")
return RedirectToAction("Index");
// something failed
if (!ModelState.IsValid)
{
}
// Update the articles
}
我的问题是,当我使用Request.Form访问post值时,它工作正常,不会抛出“潜在危险…”错误,但当我使用Request.Params[“Button”]时,它抛出了该错误。是不是我错过了什么
谢谢
已更新
对不起,亚当给出的答案并没有真正回答我的问题。有人能再提些建议吗 理想情况下,您不应该真正使用这两种方法。这些都是以Web表单为中心的价值观,即使它们“可以”使用 传入FormsCollection项并使用collection[“Button”]检查它,或者更好—您的“取消”按钮本身可能只是执行重定向。除了重定向什么都不做,为什么还要发帖 在您的视图中,您可以通过url.Action()发出url,并将其放入按钮的单击处理程序(客户端)引发此异常的是getter。这个getter基本上构建并返回一个键/值对集合,它是QueryString、Form、Cookie和ServerVariables集合按该顺序的聚合。现在重要的是,当您使用此getter时,它将始终执行请求验证,无论您是对某些模型属性使用
[AllowHtml]
属性,还是使用[ValidateInput(false)]
属性修饰控制器操作并禁用所有输入验证
所以这实际上不是allowtml
属性中的错误。这就是Params
属性的设计方式
正如@Adam在他的回答中提到的,您应该避免手动访问请求值。您应该使用值提供程序,它会考虑到某些字段的禁用请求验证等情况
因此,只需向视图模型添加另一个属性:
public class ArticleModel: BaseModel
{
[StringLength(8000, ErrorMessage = "Long description must be in 8000 characters or less")]
[AllowHtml]
public string LongDescription { get; set; }
public string Button { get; set; }
}
然后在控制器操作中:
[HttpPost]
public ActionResult AddEdit(ArticleModel model)
{
string buttonName = model.Button;
if (buttonName == "Cancel")
{
return RedirectToAction("Index");
}
// something failed
if (!ModelState.IsValid)
{
}
// Update the articles
}
javascript受到我们客户端的限制,如果我们使用js,我们还需要准备非js版本,这为我们增加了额外的工作。我使用FormsCollection,但有时调用request.xxx非常方便。无论如何,我的问题是为什么Request.Form可以工作,但Request.Params不能工作。现在使用FormsCollection并不是那么容易。我确实充分利用了mvc模型绑定将表单数据绑定到我的模型中,我不想更改我的操作以接收FormsCollection,然后尝试将值重新绑定到我的模型中。这个答案假设您知道编译时所有表单字段都是什么。如果在运行时生成表单字段,该怎么办。我有一个例子,我需要在运行时生成数量不确定的表单字段。使用Request.Params可以很好地工作,直到我想在输入中允许html。