2016-05-02 13 views
-1

モデルでMVCを使用しています。私はリッチテキスト入力を受け入れるコントローラに[ValidateInput(false)]を使用しました。これはうまくいった。今私は私が好む[AllowHtml]post)を使用することを可能にする以下の記事を見つけました。AllowHtmlがモデルでは最初に動作しません

[MetadataType(typeof(YourEntityMetadata))] 
public partial class YourEntityClass 
{    
} 

public class YourEntityMetadata 
{ 
    [AllowHtml] 
    public string YourPropertyWithHtml { get; set; } 
} 

私はこれを試しましたが動作しませんでした。テストの理由から、AllowHtmlを自動生成モデルのプロパティに直接追加しましたが、これも機能しませんでした。どちらの場合も、私は同じエラー「潜在的に危険な要求...」を受け取りました。

入力はCKEditorの単純なリッチテキスト<p> lorem <\p>です。 コントローラは、データベースにアクセスするための実際の書き込みと、モデルの最初のModelContainerへのアクセスを行う別の関数を呼び出します。

[AllowHtml]が動作しないような自動生成機能がありますか?コントローラがエンティティに直接アクセスしたり作成したりすることなく、エンティティを作成してデータベースに保存する別の関数に文字列を渡すことは問題ですか?

EDIT

XSRFトークンをチェックするフィルタを無効にしました。

public class ViewTest 
{ 
    [AllowHtml] 
    public string BlockContent { get; set; } 
} 

、まだ要求がでマークされています。単純なビューモデルで

public int SaveBlock(string blockCont) 
{ 
    var testt = new ViewTest() { BlockContent = blockCont }; 
    return 0; 
} 

:私は、コントローラのメソッドをストリップダウン

<httpRuntime targetFramework="4.6.1" requestValidationMode="2.0" /> 

:私は、要求の検証モードが設定されています潜在的に危険なエラーです。

+1

'[AllowHtml]'は、正しいプロパティに適用されていると仮定するとうまく動作します。 –

+0

自動生成されたクラスコードには何も置かないでください。実際、エンティティクラスにこのプロパティは必要ありません。ビューからアクションメソッドへデータを転送するビューモデルを作成し、この属性を関連するプロパティに適用する必要があります。 – Shyju

+0

[この回答](http://stackoverflow.com/a/4866070/6268935)と[この回答](http://stackoverflow.com/a/82170/6268935)を見てください。 – Arman

答えて

0

有用なコメントを念頭に置いて、もう少し問題を読んでいます。私はデータがコントローラメソッドで受け入れられたときではなく、モデルに書き込まれるときにデータアノテーションが適用されると思っていたのが私の混乱でした。

もちろん、コントローラに文字列を送信し、モデルに実際に書き込むときにその文字列が検証されることを期待する私のアプローチは間違っていました。多分私はちょっと欲しかったでしょう。

可能な限り私のデータモデルをコントローラから分離したい(リポジトリを使用して)私のアプローチでは、コントローラへ送信される入力のビューモデルが前進する唯一の方法だと思います。しかし、私の場合は、データベースへの1つのhtml入力だけを許可するために、非HTML文字列入力をエンコードすることに固執すると思います。

関連する問題