2011-11-21 42 views
1

我的模型包含一個名爲「longdescription」的字符串字段,得到TinyMCE的編輯器的內容的價值ASP.NET MVC AllowHtml錯誤什麼的,我沒有使用正確

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訪問帖子值,它工作正常,沒有拋出「一個潛在危險的....」錯誤,但是當我使用Request.Params [「Button」]時,它扔了那個錯誤。我錯過了什麼?

感謝

更新

對不起答案亞當給了並沒有真正回答我的問題。任何人都可以提供更多建議嗎?

回答

1

這是HttpRequest.Params吸氣劑是引發此異常。這個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 
} 
+0

這個答案假定你知道在編譯時所有的表單字段。如果你在運行時生成表單域,你會怎麼做。我有一個例子,我需要在運行時生成未定義數量的表單字段。這工作正常使用Request.Params,直到我想在輸入中允許html。 – ChrisFox

2

理想情況下,你不應該使用任何一種。即使它們'可以'被使用,那些更多的Web Forms中心值也是如此。

要麼通過FormsCollection項目,並使用集合[「按鈕」]或更好地檢查它 - 您的取消按鈕本身應該可能只是做重定向。爲什麼發佈時,你什麼都不做,但重定向?

在你看來,你可以通過發出Url.Action()的URL並將它放入您的按鈕的點擊處理程序(客戶端)

+0

JavaScript是由我們客戶端的限制,如果我們使用JS,我們還需要準備爲我們增加額外工作的非js版本。我使用FormsCollection,但有時調用request.xxx非常方便。無論如何,我的問題是關於爲什麼Request.Form工作,但不是Request.Params。 – Vincent

+0

現在使用FormsCollection並不那麼容易。我完全利用mvc模型綁定將表單數據綁定到我的模型中,我不想更改我的動作以接收FormsCollection,然後嘗試將值重新綁定到我的模型中。 – Vincent

相關問題