我的模型包含一个名为“longdescription”的字符串字段,它获取了tinymce编辑器内容的值
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”]时,它抛出了错误。是我缺少的东西吗?
由于
更新
对不起,Adam给出的答案并没有真正回答我的问题。任何人都可以提出更多建议吗?
答案 0 :(得分:2)
理想情况下,你不应该真的使用它们。即使可以“使用”,这些也是更多以Web窗体为中心的值。
传入一个FormsCollection项并使用collection [“Button”]检查它甚至更好 - 你的取消按钮本身应该只是重定向。为什么只在重定向时什么都不发布?
在您的视图中,您可以通过Url.Action()发出网址并将其放入按钮的点击处理程序(客户端)
答案 1 :(得分:1)
HttpRequest.Params
getter抛出此异常。此getter基本上构建并返回一个键/值对集合,它是该顺序中QueryString,Form,Cookies和ServerVariables集合的集合。现在重要的是,当你使用这个getter时,无论你是否在某个模型属性上使用了[AllowHtml]
属性,或者是否使用[ValidateInput(false)]
属性修饰了控制器操作,它总会执行请求验证并禁用所有输入验证。
所以这不是AllowHtml
属性中的错误。这是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
}