問題には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});
}