<asp:templatefield headertext="附件">
<itemtemplate>
<a href=<%#System.IO.File.Exists(Server.MapPath("..\\Attachments\\"+Eval("attachment")))==true?"../attachments/"+Eval("attachment"):"../../fmc14/FMCFiles/"+Eval("attachment")%> target="_blank">查看</a>
</itemtemplate>
<edititemtemplate>
<input runat="server" type="file" id="file01"/>
</edititemtemplate>
</asp:templatefield>
<asp:HyperLinkField DataTextField="attachment" DataNavigateUrlFields="attachment" DataNavigateUrlFormatString="../../fmc14/FMCFiles/{0}"/>以上是两种查看附件的方法
第一种方法本地局域网可以,局域网外链接过来就打不开文件
IE地址栏上显示:***/v1_GE04-6S1300消防器材使用標準SOP.pdf
第二种方法两地都可以
IE地址栏上显示:***/v1_GE04-6S1300%e6%b6%88%e9%98%b2%e5%99%a8%e6%9d%90%e4%bd%bf%e7%94%a8%e6%a8%99%e6%ba%96SOP.pdf1,请问以上两种有什么区别?
2,如果我要第二种,怎样使用第一种的判断?
判断如下:
<%#System.IO.File.Exists(Server.MapPath("..\\Attachments\\"+Eval("attachment")))==true?"../attachments/"+Eval("attachment"):"../../fmc14/FMCFiles/"+Eval("attachment")%>
谢谢!

解决方案 »

  1.   

    推荐第二种,自动URL编码,不会出现中文问题把超级链接列转换为模板列,然后进入类似itemdatabound事件找到控件进行操作
      

  2.   

      private void gv01_RowDataBound(object sender,GridViewRowEventArgs e)
      {    
    if(e.Row.RowType==DataControlRowType.DataRow)
    {
      HyperLinkField linkField=(HyperLinkField)gv01.Columns[2];
      HiddenField hField=(HiddenField)e.Row.Cells[1].FindControl("hField");
      linkField.DataNavigateUrlFormatString=System.IO.File.Exists(Server.MapPath("..\\Attachments\\"+hField.Value))==true?"../attachments/"+hField.Value:"../../fmc14/FMCFiles/"+hField.Value;
    }
      }以上的代码确实可以,但是当有两个以上附件在\\Attachments文件时,会出错:
    已超過連接逾時的設定。在取得集區連接之前超過逾時等待的時間,可能的原因為所有的共用連接已在使用中,並已達共用集區大小的最大值。 
    描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。 例外詳細資訊: System.InvalidOperationException: 已超過連接逾時的設定。在取得集區連接之前超過逾時等待的時間,可能的原因為所有的共用連接已在使用中,並已達共用集區大小的最大值。原始程式錯誤: 
    行 88:    HyperLinkField linkField=(HyperLinkField)gv01.Columns[2];
    行 89:    HiddenField hField=(HiddenField)e.Row.Cells[1].FindControl("hField");
    行 90:    linkField.DataNavigateUrlFormatString=System.IO.File.Exists(Server.MapPath("..\\Attachments\\"+hField.Value))==true?"../attachments/"+hField.Value:"../../fmc14/FMCFiles/"+hField.Value;行 91:  }
    行 92:   }
     
    很可能System.IO.File.Exists(Server.MapPath("..\\Attachments\\"+hField.Value))花的时间太久,怎么办?
      

  3.   

    再测试时,发现:
      HyperLinkField linkField=(HyperLinkField)gv01.Columns[2];
      HiddenField hField=(HiddenField)e.Row.Cells[1].FindControl("hField");
      linkField.DataNavigateUrlFormatString=hField.Value;
    中换成linkField.DataNavigateUrlFormatString="xx";就正常。请高手来解答,谢谢!