1

Asp.Net MVC3 の初心者で、CKEditor を使用しようとしていました。しかし、入力したテキストを取得できないので、送信を押します。

私の見解:

<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});
}

私は何を間違っていますか?

4

1 に答える 1

2

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

ASP.NET MVC(3)は、多くの規則に基づいて機能します。リクエストからパラメータなどに魔法のように値などを割り当てます。もちろん、これらの規則は明らかにパラメータの名前に基づいています。名前が一致していることを確認する必要があります(今すぐ理解できるように、これは維持するのが面倒です)。

簡単な解決策は、ビュー内のtextareaに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リンク)をfalseに設定できます。例:

[HttpPost]
[ValidateInput(false)]
public ActionResult Description(string textdetails)
{
    //Doing something with the text
    return RedirectToAction("Create", "Project", new { text = textdetails});
}
于 2012-05-08T21:01:18.687 に答える