0

主にデータベース内のエントリを表示するという 2 つの目的を果たすページがありますが、いくつかの値を編集し、下部で選択したボタンに応じてそれらを更新できるため、一部のフィールドはテキストフィールド/テキストエリアに表示されます。エントリ。私が特に気に入っているのは、そのルック アンド フィールであり、ページ内で自然にサイズ変更でき、SelectAll などの標準的な右クリック オプションが付属していることです。thx はブラウザーのサポートです。

とにかく、それらのフィールドの 1 つ (テキストエリアに表示されます) は、その値が編集されないため、ポストバック時に通過しないようにしたいと思います (@readonly にしたので、編集することさえできません)。テキストエリア)。

ASPX ページからの入力に対するフォーム ポストバックを防止するにはどうすればよいですか? 一般的に直感に反することはわかっていますが、隠し入力に似た方法があるのではないかと思いました。また、コントローラーでは、フォームから送信されたモデルで何かを行う前に、モデルのそのフィールドを消去するだけでよいことを知っていますが、ページからできるオプションがあるかどうか知りたいです。

この構文を使用して、テキストエリアを定義しています。

<%: Html.TextAreaFor(model => model.Key, new { @readonly = "readonly", @class = "readonly", cols = 62, rows = 15 })%>

編集
これを行う必要がある主な理由の1つは、モデルフィールドの1つにHTMLが含まれている可能性があるためです。これは内部 Web サイトであり、そのフィールドは手動で編集できないため、HTML を入力することはできません。これは、ライセンス生成プログラムから得られるデータベース内の値にすぎません。そのため、モデル フィールドにバインドされたフォームで TextArea を使用すると、ASP.NET は TextArea データをモデルにバインドしてポストバック時に送信するときに例外をスローします。

[AllowHtml] および [ValidateInput(false)] 属性を使用して SO の回答を見ました。1 つは MVC2 では利用できず、もう 1 つは requestValidationMode をダウングレードする必要があるため、可能な HTML 値がまったくポストバックされています(ただし、テキストエリアにはまだ表示されています)。

4

1 に答える 1

0

jQuery でフォーム送信イベントを処理することでこれを実現しました。

<script type="text/javascript">
    $(document).ready(function ()
    {
        // clear key area upon form post, because old keys contain HTML tags,
        // which cause an exception during model binding when form validation is on
        $("form").submit(function()
        {
            $("#keyArea").val("");
        });
    });
</script>

基本的に、モデルにバインドされて投稿される前に、テキストエリアをクリアするだけです。このようにして、テキストエリアを使用してモデル値を表示し、ポストに戻らないようにすることができます。

マイナーな問題は、投稿によってユーザーが別のページに移動した場合 (可能性が高い)、ユーザーが [戻る] ボタンを押したときにテキストエリアが空白になることです。しかし、単純なページ更新でこれに対処できます。

于 2013-06-04T13:54:15.840 に答える