2015-08-08 46 views
0

我有這個URL(mydomain.com/mypage.aspx)。我只想在webmethod中獲取文件名「mypage」。我嘗試了下面的代碼,但我只獲取了函數本身的名稱(MyMethod)。我沒有從URL中獲取頁面的名稱。任何幫助,非常感謝。如何在web方法中獲取沒有擴展名的URL文件名

編輯 更具體地將WebMethod駐留在如此使用文件路徑或PhysicalPath會給我在URL中的用戶控件文件名(的MyUserControl),而不是aspx頁面(我的空間)的名稱的用戶控制。

mypage.aspx

<asp:Content ID="Content" ContentPlaceHolderID="ContentPlaceHolder" runat="server"> 
<uc:myUserControl runat="server" /> 
</asp:content> 

myUserControl.cs

public static string PageName { get { 
    return (string)(Path.GetFileNameWithoutExtension(
     Convert.ToString(HttpContext.Current.Request.Url))); 
} } 

OR

public static string PageName { get { 
    return (string)(Path.GetFileNameWithoutExtension(
     HttpContext.Current.Request.RawUrl)); 
} } 

OR

public static string PageName { get { 
    return (string)(Path.GetFileNameWithoutExtension(
     HttpContext.Current.Request.PhysicalPath)); 
} } 

[WebMethod] 
public static string MyMethod() 
{ 
    StringBuilder SBstring = new StringBuilder(); 
    SBstring.Append(PageName); 
    return SBstring.ToString(); 
} 

回答

0

只需使用文件路徑是這樣的:

 var fi = new FileInfo(HttpContext.Current.Request.FilePath); 
     var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fi.Name); 

所需的結構完整的工作解決方案(母版頁 - >內容頁 - >用戶控制

的Site Master

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="WebTester.Site1" %> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <asp:ContentPlaceHolder ID="head" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager> 
     <div> 
      <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 
      </asp:ContentPlaceHolder> 
     </div> 
    </form> 
</body> 
</html> 

WebForm1.aspx的:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebTester.WebForm1" %> 
<%@ Register src="WebUserControl1.ascx" tagname="WebUserControl1" tagprefix="uc1" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
    <uc1:WebUserControl1 ID="WebUserControl11" runat="server" /> 
</asp:Content> 

Webform 1.aspx.cs:

namespace WebTester 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     [WebMethod] 
     public static string ProcessIT(string name, string address) 
     { 
      return WebUserControl1.ProcessIT(name, address); 
     } 
    } 
} 

WebUserControl1.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebTester.WebUserControl1" %> 

<script type="text/javascript"> 
    function HandleIT() { 
     var name = document.getElementById('<%=txtname.ClientID %>').value; 
      var address = document.getElementById('<%=txtaddress.ClientID %>').value; 
      PageMethods.ProcessIT(name, address, onSucess, onError); 
      function onSucess(result) { 
       alert(result); 
      } 

      function onError(result) { 
       alert('Something is wrong.'); 
      } 
     } 
</script> 


<div> 
    <p>Please enter data:</p> 
    Name<br /> 
    <asp:TextBox ID="txtname" runat="server"></asp:TextBox> 
    <br /> 
    Address<br /> 
    <asp:TextBox ID="txtaddress" runat="server"></asp:TextBox> 
    <br /> 
    <asp:Button ID="btnCreateAccount" runat="server" Text="Signup" OnClientClick="HandleIT(); return false;" /> 
</div> 

WebUserControl1.ascx.cs:

namespace WebTester 
{ 
    public partial class WebUserControl1 : System.Web.UI.UserControl 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     public static string ProcessIT(string name, string address) 
     { 
      var fi = new FileInfo(HttpContext.Current.Request.FilePath); 
      var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fi.Name); 
      string result = string.Format("Name '{0}' and address '{1}' came from Page '{2}'", name, address, fileNameWithoutExtension); 
      return result; 
     } 
    } 
} 
+0

我只是嘲諷了類似的東西。好的答案。 –

+0

這將給我的網站的方法所在的cs文件的名稱,但不是aspx主頁......更具體地說,webmethod駐留在用戶控件中,所以使用FilePath會給我UserControl文件名的名稱....我想要aspx頁面的名稱。 – Gloria

+0

是的,這是正確的。你在找什麼母版頁?主機包含此Web方法(MyMethod)的aspx或源自Request的源(如果您創建從A.aspx到B.aspx的調用)? –

相關問題