2011-04-21 76 views
0

我有一個字段需要允許HTML。這是100%有效和好的。當我從我的應用程序發佈後,我得到以下信息:HTML MVC 3字段驗證

A potentially dangerous Request.Form value was detected from the client (PowerSource.Text[0]="<p>A control im..."). 

要停止我加入到我的課驗證如下:

public class PowerSource 
{ 
    [System.Web.Mvc.AllowHtml] 
    public string[] Text { get; set; } 
} 

}

的問題是,它不」 t似乎工作。我已經爲其他領域做到了這一點,我相信它可以正常工作。但不適用於上述領域。

有沒有人有任何建議?我是否需要將此字段標記爲數據成員或類似的內容?

請注意,我使用的是MVC3,而且我明白這個版本的驗證有點不同。

+0

只是要確定 - 你想從表單中發佈的值使用字符串數組?你如何劃定/綁定這些? – 2011-04-21 04:00:29

+0

字符串數組部分似乎工作正常。我使用@ Model.PowerSource.Text [@index],似乎工作正常。只是當我添加HTML時,問題就開始了。 – Marie 2011-04-21 04:12:49

+0

我不確定這是否有所作爲,但我的PowerSource類是作爲傳遞給窗體的視圖模型中幾個類之一的一部分調用的。 – Marie 2011-04-21 04:14:25

回答

0

你裝飾與[AllowHtml]屬性的屬性是一個陣列(string[])。這應該是一個簡單的字符串屬性這個工作:

[AllowHtml] 
public string Text { get; set; } 

然後在視圖中你可以有一個相應的輸入字段,允許用戶輸入任何內容:

@Html.TextAreaFor(x => x.Text) 

最後當你提交那麼下面的動作不應該是例外:

[HttpPost] 
public ActionResult Index(PowerSource model) 
{ 
    ... 
} 
+0

感謝您的建議,但是我需要一個數組字符串作爲我發送給我的視圖的數據可以有任何數量的文本區域,如果我向控制器添加[ValidateInput(false)],我的代碼就可以正常工作,除非你有任何建議,那麼我認爲這可能是我唯一的選擇。 – Marie 2011-04-21 05:27:49

+0

@Marie,你可以定義一個自定義的類:public class TextModel {[AllowHtml] public string Text {get;組; }}'然後讓你的主模型將這個'TextModel'的集合作爲屬性:'public class PowerSource {public TextModel [] Texts {get;組; }}。然後在視圖中,您將生成綁定到此子模型的textareas。請注意,「ValidateInput(false)」會禁用整個請求的輸入驗證,而不僅僅針對您想要的屬性。 – 2011-04-21 05:30:40

+0

這似乎是一個非常好的主意。我會檢查這一點。感謝您的幫助。我會將你的答案標記爲已接受。祝你有美好的一天。 – Marie 2011-04-21 05:32:37

-1

你必須在你的控制器中添加[ValidateInput(false)],不知道你是否可以在模型上做到這一點,但它在控制器中適用於我。

[HttpPost] 
[ValidateInput(false)] 
public ViewResult Edit(Object obj) 
{ 
} 
+0

糾正我,如果我錯了,但我相信它現在在MVC3不同,這就是爲什麼我試圖做每場驗證。你的建議確實解決了這個問題,但我真的很想只在現場做。謝謝 – Marie 2011-04-21 04:19:35

+0

我不知道模型屬性,但它在我的MVC3項目的控制器中工作得很好。 – VinnyG 2011-04-21 04:22:07

+0

模型屬性允許您在粒度級別進行驗證。這是MVC3中的一項新功能。這是我試圖使用的功能。 – Marie 2011-04-21 04:30:33