首页 > 解决方案 > 在新选项卡中打开 .pdf 文件

问题描述

在我的表单中,我有一个 ddl,用户可以在一些 pdf 文件之间进行选择。
我想将用户选择的 ID(它包含 pdf 的完整路径)传递给 window.open 命令。

//This is the div that contains the data
        <div class="form-group">
            <div class="row">
                <div class="col-xs-12 col-sm-6 col-md-6 col-lg-4">
                    <label asp-for="FDescr" class="control-label">File</label>
                    <select asp-for="FCodeID" class="form-control"
                            asp-items="@(new SelectList(string.Empty, "FCodeID", "FDescr"))"></select>
                </div>
            </div>
        </div>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.js"></script>

//This is where I load the data in the #FCodeID ddl
<script type="text/javascript">
        $(document).ready(function () {
            $("#MCodeID").on("change", function () {
                var url = '@Url.Content("~/")' + "Materials/GetFiles";
                var ddlsource = "#MCodeID";
                var items = "<option value='0'>--Select File--</option>";
                $("#FCodeID").html(items);
                var items = " ";
                $.getJSON(url, { MCodeID: $(ddlsource).val() }, function (data) {
                    $("#FCodeID").empty();
                    $.each(data, function (i, file) {
                        if (file.value.includes("in Use"))
                            items += "<option value='" + file.value + "'" + "style='background-color:orange;'>" + file.text + "</option>";
                        else
                            items += "<option value='" + file.value + "'>" + file.text;
                    });
                    $("#FCodeID").html(items);
                });
            })
        })
    </script>

//This is what I'm trying to accomplish
    <script type="text/javascript">
        $(document).ready(function () {
            $("#FCodeID").on ("change", function () {
                var url= "#FCodeID";
                window.open(url, '_blank');
            })
        })
    </script>

我想在 window.open() 上用我的文件的实际路径打开一个新选项卡。
ex 192.168.1.1/MyFiles/MyPDF.pdf
提前感谢您的帮助。

标签: c#jqueryasp.net-mvc

解决方案


@ADyson 提供的解决方案

<script type="text/javascript">
  $(document).ready(function () {
    $("#FCodeID").on ("change", function () {
      var url = "../MaterialsFiles" + this.value;;
      window.open(url, '_blank');
    })
  })
</script>

另外,我更改了 JsonResult 中的 .value 字符串,如下所示:

public JsonResult GetFiles(string MCodeID)
{
    List<Files> filelist = new List<Files>();
    //Searching Files in //192.168.1.191
    string path = @"path to file srv";
    string searchPattern = MCodeID + "*";
    DirectoryInfo fi = new DirectoryInfo(path);
    foreach (var file in fi.GetFiles(searchPattern, SearchOption.AllDirectories))
    {
        var changeSlash = file.FullName.Replace('\\', '/');
        var filepath = changeSlash.Replace("path to file srv", "");
        filelist.Add(new Files
        {
            FCodeID = filepath,
            FDescr = file.Name + " - " + Math.Round((Convert.ToDouble(file.Length) / (1024 * 1024)), 2) + " MB",
        });
        }
    filelist.Insert(0, new Files { FCodeID = "0", FDescr = "--Select File--" });
    return Json(new SelectList(filelist, "FCodeID", "FDescr"));
}

最后,我添加了一个新的 Virtual,例如:

<site name="MaterialProject" id="2">
  <application path="/" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="path to solution local file" />
    <virtualDirectory path="/MaterialsFiles" physicalPath="path to file srv" />
  </application>
</site>

推荐阅读