2017-04-27 77 views
0

我的页面上有一些Knockout.js代码,根据下拉列表的选定值生成可下载文件的列表 - 下载的来源位于SQL数据库中,我只是存储物理文件名 - 列表通过ASP.Net MVC控制器操作返回到Json格式的页面。相关淘汰赛代码:Knockout.js URL编码

$(document).ready(function() { 

    function DDLViewModel() { 

     var self = this; 
     self.ddlDim1 = ko.observableArray([]); 
     self.selectedDim1 = ko.observable(); 
     self.selectedDim1.subscribe(FetchVariant); 

     //default values from Model 
     self.PDFs = ko.observableArray(@Html.Raw(Json.Encode(Model.PDFs))); 

     function FetchVariant() { 
      if (self.selectedDim1()) 
      { 
       $.ajax({ 
        type: 'POST', 
        url: '@Url.Action("GetVariant")', // we are calling json method 
        dataType: 'json', 
        // here we get value of selected dim. 
        data: { productId: @Model.Product.ProductID, 
         Dim1: self.selectedDim1() 
        }, 
        success: function (variant) { 
         // variant contains the JSON formatted variant data passed from the controller 
         var newpv = []; 
         newpv.push(variant); 
         self.PDFs(newpv[0].PDFs); 
        }, 
        error: function (ex) { 
         //alert('Failed to retrieve variant.' + ex); 
         self.PDFs(@Html.Raw(Json.Encode(Model.PDFs))); 
        } 
       }); 
      } 
      else 
      { 
       //not selected so reset all values back to Model 
       self.PDFs(@Html.Raw(Json.Encode(Model.PDFs))); 
      } 
     } 


    } 

    ko.applyBindings(new DDLViewModel); 
}) 

<div data-bind="visible: PDFs().length"> 
    <h3>Downloads</h3> 
    <!-- ko foreach: PDFs --> 
    <p><a data-bind="attr: { href: '/artwork/ProdPDF/' + FileName }, text: Title" target="_blank"></a></p> 
    <!-- /ko --> 
</div> 

我的问题是,文件名没有被编码,所以任何文件名以说,在一个&符不工作。有没有一种方法可以在Knockout代码中内联编码url/filename?

回答

0

当然,请使用encodeURIComponent

<p><a data-bind="attr: { href: '/artwork/ProdPDF/' + encodeURIComponent(FileName) }, text: Title" target="_blank"></a></p>