我的视图包含一个很长的字符串(> 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。 :(
所以我想做的是从一个页面(视图)我想打开另一个页面(视图),在另一个页面中我想要显示我在第一页中的真正长字符串。
我做错了什么,我应该怎么做?
答案 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">×</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>
身体标签的底部有它。