ASP MVC:使用非常大的字符串从视图中打开视图

时间:2013-03-27 13:58:45

标签: asp.net-mvc

我的视图包含一个很长的字符串(> 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)

然后调用我的Controller中的函数LongStringView,但其输入变量longString始终为null。 :(

所以我想做的是从一个页面(视图)我想打开另一个页面(视图),在另一个页面中我想要显示我在第一页中的真正长字符串。

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

2 个答案:

答案 0 :(得分:1)

所以你试图在你的URL中传递一个&gt; 1000个char参数?听起来很糟糕。

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

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

答案 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(将模态的开头附加到click事件,并切换模态的内容):

$(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>

身体标签的底部有它。