2

我在使用 jQuery File Tree 插件显示数据时遇到问题。不管我用什么'root',它总是使用'​​\'并显示C盘的内容!

我正在使用 aspx(后面有我不使用的代码)和母版页。

<div class="col-md-12" id="divAIMDocs">
</div>

<script>
    function openFile(file) {
        // do something with file
        alert(file);
    }
    $(document).ready(function () {debugger
        $('#divAIMDocs').fileTree({
            root: decodeURI(uploadFolder),
            script: '../assets/vendor/jquery_FileTree/connectors/jqueryFileTree.aspx',
            expandSpeed: 1000,
            collapseSpeed: 1000,
            multiFolder: false
        }, function(file) {
            openFile(file);
        });
    });

</script>

我在 venodr 的 js 文件(如下)以及“连接器”脚本中添加了一个断点:

$(this).each( function() {
            
    function showTree(c, t) {debugger  <-- this shows 't' as '\'
        $(c).addClass('wait');

在连接器脚本 jqueryFileTree.aspx 中:

string dir;
if(Request.Form["dir"] == null || Request.Form["dir"].Length <= 0) <-- always null
    dir = "/";
else
    dir = Server.UrlDecode(Request.Form["dir"]);

然后我尝试将“根”值硬编码为“D:\Some\Folder”:

    $(document).ready(function () {debugger
        $('#divAIMDocs').fileTree({
            root: 'D:\Some\Folder\',
            script: '../assets/vendor/jquery_FileTree/connectors/jqueryFileTree.aspx',
            ...

我在函数 showTree 中看到参数 't' 现在实际上看到了 'D:\Some\Folder' 但连接器仍然说 Request.Form["dir"] 为 null 并继续显示 C 驱动器的内容。

我在这里做错了什么?

4

1 回答 1

1

正如我所想,问题出在 Request.Form["dir"] 上。我找到了这篇文章,它指出了一个我不会想到的问题。这是由于使用了 .NET 的 FriendlyURL 特性(即与 jQuery File Tree 插件无关)。

“此示例中的 HTML 表单旨在发布到 Receiver.aspx,友好 URL 将接受包含文件扩展名的请求并发出 HTTP 301 - 永久移动响应,指示浏览器发出新的 (GET) 请求没有文件扩展名的相同资源。”

解决方案是在 RoutConfig.cs 文件中注释掉以下行:

public static void RegisterRoutes(RouteCollection routes)
{
    var settings = new FriendlyUrlSettings();
    //settings.AutoRedirectMode = RedirectMode.Permanent;
    routes.EnableFriendlyUrls(settings);
}

原始 POST 被后续 GET 覆盖,数据丢失。

仅当通过表单 POST 加载页面时才会填充 Request.Form。

于 2020-09-16T20:29:24.150 回答