0

非常に長い文字列(> 1000文字)を含むビューがあります。そのビューで、別の(完全な)ビューを独自のページで開き、そのビューのモデルを非常に長い文字列にします。したがって、次のようになります。

最初のビュー:

@model myDataStringWithManyLongStringsInIt<string>

@{
    foreach (string s in Model)
    {
        @Html.ActionLink("Show long string", "LongStringView", new { longString = s }, new { target = "_blank" })

そして私のコントローラーでは:

public ActionResult LongStringView(string longString)
{
    return View(longString);
}

そして私の見解ではLongStringView:

@Model string
<div class="row-flud">
    <div class="span12">@Model</div>
</div> 

私の問題は、このコードを実行すると、longStringが長すぎることです。したがって、次のエラーが発生します。

HTTP Error 404.15 - Not Found
The request filtering module is configured to deny a request where the query string is too long.

私も最初のビューでこれを試しましたが、結果は同じです:

@Html.ActionLink("Test!", "LongStringView", "MyController", new { longString = s }, new { target="_blank"})

私がこれを行う場合:

@Html.ActionLink("Test two!", "LongStringView", "MyViews", longString, null)

次に、コントローラーの関数LongStringViewが呼び出されますが、その入力変数longStringは常にnullです。:(

ですから、私がやりたいのは、あるページ(表示)から別のページ(表示)を開き、その別のページに、最初のページにある非常に長い文字列を表示することです。

私は何を間違っているのですか、そしてこれをどのように行うべきですか?

4

2 に答える 2

1

それで、あなたはあなたのURLで> 1000charパラメータを渡そうとしていますか?悪い計画のように聞こえます。

のデータベースから長い文字列をリロードするのはどうLongStringViewですか?次に、IDまたは任意のパラメータをメソッドに渡すだけで、ロードする文字列を識別できます。

または、JQueryUIダイアログなどを使用して、サーバーにポストバックせずに文字列を表示することもできます。

于 2013-03-27T15:48:59.483 に答える
1

あなたのコメントによると、あなたは適切な識別子のない文字列しか得られませんでした。

これを解決する1つの方法は、文字列サーバー側を処理し、新しく作成された識別子を使用してそれらを格納することですが、この方法ではアプリケーションがステートレスにならないため、さらに簡単な(ただし実際には最適ではない)方法で実行しましょう。

コントローラを忘れてください。追加のアクションは必要ありません。ビューを確認してください。

@foreach (var result in results)
{
    var shortString = result.Substring(0, 99);
    <section>
        <div class="row-fluid">
            <div class="span12">@shortString</div>
            <a href="#" class="full-link" data-long-string="@result">See long version</a> 
        </div>
    </section>
}

<div id="myModal" class="modal hide fade">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
        <h3>Modal header</h3>
    </div>
    <div class="modal-body">
    </div>
    <div class="modal-footer">
        <a href="#" class="btn"  data-dismiss="modal">Close</a>
    </div>
</div>

また、小さなjavascriptが必要です(モーダルの開始をクリックイベントにアタッチし、モーダルのコンテンツを切り替えます)。

$(function() {
    $('.full-link').on('click', function () {
        var longString = $(this).data('longString');
        var $myModal = $('#myModal');
        var $bodyElem = $myModal.children('.modal-body');
        $bodyElem.html(longString);
        $myModal.modal('show');
    });
});

このJavaScriptをどこに置くかについて。あなたの最善の策は、javascriptファイルにこのスクリプトを入れて、jqueryを参照した後のどこかでそれを参照するようにすることです。好き:

<!DOCTYPE html>
<html>
    <head>
        ...
    </head>
    <body>
        ... ALL YOUR LAYOUT GOES HERE ...

        <script src="http://code.jquery.com/jquery.js"></script>
        <script src="js/bootstrap.min.js"></script>
        <script src="path/to/yourscript.js"></script>
    </body>
</html>

ボディタグの下部にあります。

于 2013-03-28T15:21:51.297 に答える