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 始终为空。:(

所以我想做的是从一个页面(视图)我想打开另一个页面(视图)并在另一个页面中显示我在第一页中拥有的非常长的字符串。

我做错了什么,我该怎么做?

4

2 回答 2

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>

在body标签的底部有它。

于 2013-03-28T15:21:51.297 回答
1

所以你想在你的 URL 中传递一个 >1000 字符参数?听起来是个糟糕的计划。

如何从数据库中重新加载长字符串LongStringView?然后,您可以将 ID 或任何参数传递给该方法以识别要加载的字符串。

或者,您可以使用 JQueryUI 对话框或类似的对话框来显示字符串,而无需回发到服务器。

于 2013-03-27T15:48:59.483 回答