web-dev-qa-db-ja.com

MVC c#でのサマーノートとフォームの送信

テキストボックスにsummernoteプラグインを使用しています: http://summernote.org/#/getting-started#basic-api

これは私がsummmernoteを使用しているフォームです:

_<div class="modal-body" style="max-height: 600px">
    @using (Html.BeginForm())
    {
        @Html.ValidationSummary(true)
        <fieldset class="form-horizontal">
            <div id="textForLabelLanguage"></div>
            <button type="submit" class="btn btn-primary">Save changes</button>
            @Html.ActionLink("Cancel", "Index", null, new { @class = "btn " })
        </fieldset>
    }
</div>

<script type="text/javascript">
    $(document).ready(function () {
        $('#textForLabelLanguage').summernote();
    });
</script>
_

さて、私のコントローラーでは、これは私が持っているコードです:

_public ActionResult Create(UserInfo newInfo , [Bind(Prefix = "textForLabelLanguage")] string textForLabelLanguage)
{
    //logic here
}
_

ここで問題となるのは、textForLabelLanguageparamが常にnullであるということです。

これは、フォームを送信するときに$('#textForLabelLanguage').code();をMVCに渡す必要があるために発生しますが、その方法がわかりません。

問題を解決するにはどうすればよいですか?

11
Flame_Phoenix

私はその問題の解決策を見つけました。これは私がコントローラーに正しい情報を取得させる方法です:

<div class="modal-body" style="max-height: 600px">
    @using (Html.BeginForm())
    {
        @Html.ValidationSummary(true)
        <fieldset class="form-horizontal">
            <textarea name="textForLabelLanguage" id="textForLabelLanguage" />
            <button type="submit" class="btn btn-primary">Save changes</button>
            @Html.ActionLink("Cancel", "Index", null, new { @class = "btn " })
        </fieldset>
    }
</div>

<script type="text/javascript">
    $(document).ready(function () {
        $('#textForLabelLanguage').summernote();
    });
</script>

基本的に、入力などの代わりに名前の付いたtextareaを使用すると、機能します。

ただし、このソリューションは機能しますが、コントローラーで次のようなエラーが発生することに注意してください。

潜在的に危険なRequest.Form値がクライアントから検出されました

これは、HTMLを許可しているために発生します。しかし、これは別の質問の問題です!

13
Flame_Phoenix

使ってください [AllowHTML]

MSDNに良い記事がありますASP.NETでの検証の要求

「特定のプロパティのリクエスト検証を無効にするには、AllowHtml属性でプロパティ定義をマークします。」

[AllowHtml]
public string Prop1 { get;  set; }
7
Marlon Dias

以前に投稿されたものと同様に、HTMLヘルパーを使用できます

@HTML.TextAreaFor( m=> m.text, new {@id = "textFor*Model*"})

の代わりに <textarea>

3
JRave