2012-05-08 13 views
1

Im Asp.Net MVC3で新しく、CKEditorを使用しようとしていました。しかし、私は入力したテキストを取得することはできません。CKEditor MVC3からテキストを取得できません

マイビュー:

<form method=post action="@Url.Action("Description")"> 
    <textarea class="ckeditor" id="editor1" rows="10" name="Details">@Resources.Resources.DescriptionSampleText</textarea> 
    <input type="submit" /> 
</form> 

そして、そこコントローラ私はテキストが必要です

[HttpPost] 
public ActionResult Description(string textdetails) 
{ 
    //Doing something with the text 
    return RedirectToAction("Create", "Project", new { text = textdetails}); 
} 

私が間違っているのは何を?

答えて

2

問題には3つの解決策があります。私はそれを直接(2つの方法で)解決することから始めますが、私の意見では、それは最善の方法ではありません。とにかく、それについてもっと後で。

ASP.NET MVC(3)は、多くの従来の方法で動作します。それは、魔法のようにリクエストなどから値などをパラメータなどに割り当てます。もちろん、これらの規則は明らかにパラメータの名前に基づいています。あなたはあなたの名前が一致することを確認する必要があります(あなたが今分かるかもしれないが、これは維持するための痛みである)。

簡単な解決策は、HttpPostアクションのパラメータと同じ視点でテキストエリアに名前を付けることです。あなたのビューコードは次のようになります:

<form method=post action="@Url.Action("Description")"> 
    <textarea class="ckeditor" id="editor1" rows="10" name="Textdetails">@Resources.Resources.DescriptionSampleText</textarea> 
    <input type="submit" /> 
</form> 

これは動作するはずです。注:今は自分でテストしませんでしたが、多くの初心者ガイドでもこれを行うので、うまくいくと思います。とにかく、私は本当にこのソリューションが好きではありません。なぜなら、それは本当に維持するのが難しいからです(リファクタリングなどはあまり簡単ではありません)。

第2の解決策は、FormCollectionを使用することです。これをHttpPostアクションのパラメータとして指定すると、インデックスを通じて値にアクセスできます。例と詳細については、このSOの投稿:https://stackoverflow.com/a/5088493/578843をご覧ください。

最後の解決策(私が好む)は、ViewModelを作成しています。私はこのページ(http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/examining-the-edit-methods-and-edit-view)を適切に編集する方法を読むことをお勧めします。

最後に、HTMLをコンテンツとして送信する場合は、ASP.NETの保護を無効にするか、メソッド(またはクラス)に注釈を追加する必要があります。一般的にセーブガードを無効にしないでください(htmlなどの入力をチェックします)、必要なときに注釈を付けて無効にしてください。アクションでValidateInput属性(MSDN link)をfalseに設定できます。例:

[HttpPost] 
[ValidateInput(false)] 
public ActionResult Description(string textdetails) 
{ 
    //Doing something with the text 
    return RedirectToAction("Create", "Project", new { text = textdetails}); 
} 
関連する問題