2014-02-06 37 views
2

如何從JavaScript函數返回true/false到C#代碼?C#中的JavaScript函數返回布爾值#

我的代碼有什麼問題?

ASP.NET

< asp:HiddenField ID="hiddenFieldResult" runat="server" /> 

的JavaScript

< script type="text/javascript"> 
< !-- 
function deleteUser(userName) { 
var retVal = confirm("Delete " + userName + "?"); 
if (retVal == true) { 
    document.getElementById('<% =hiddenFieldResult.ClientID %>').value = true; 
    return true; 
} 
else { 
    document.getElementById('<% =hiddenFieldResult.ClientID %>').value = false; 
    return false; 
} 
} 
//--> 
</script> 

C#

Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "deleteUser('" + user.userName + "');", true); 
Label1.Text = "User is deleted? " + hiddenFieldResult.Value; 
+9

您需要了解**客戶端**代碼和**服務器端**代碼之間的區別。這完全不可能;你需要多個HTTP請求。 – SLaks

+0

在調試器中運行它 - 您會發現在瀏覽器中顯示頁面並執行腳本之前,會執行這兩條C#行*。 –

回答

2

SLaks是正確的。您不能僅以這種方式將值從JavaScript傳遞到C#。當我需要在JavaScript(客戶端代碼)和C#(服務器端代碼)之間共享數據時,我通常爲簡單案例所做的工作是創建一個ASPX文件,它將接收JavaScript變量。

例如,在我的HTML我有這樣的:

var Id = $(this).data("Id"); 
$.ajax({ 
    type: "POST", 
    url: "catcher.aspx/doSomething", 
    data: '{ Id: ' + Id + ' }', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    async: false, 
    success: function (data) { 
     // Do something on success 
     console.log(data.d); 
     // data.d returns "Hello World!" 
    }, 
    failure: function (response) { 
     // Do something on failure 
    } 
}); 

有了這個,我要送和AJAX POST到一個名爲catcher.aspx文件,其中有一個在它叫做DoSomething的的WebMethod的代碼隱藏文件。看起來像這樣:

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

     [WebMethod()] 
     public static string doSomething(string Id) 
     { 
      string something = "Hello World!"; 
      return something; 
     } 
    } 
} 

要結束。 JavaScript通過AJAX POST在C#中調用方法。它發送和Id並獲得一個字符串作爲回報。您可以根據需要調整JavaScript和C#。

如果你想要發送一個布爾值到C#,POST它。

function deleteUser(userName) { 
    var retVal = confirm("Delete " + userName + "?"); 
    if (retVal == true) { 
     document.getElementById('<% =hiddenFieldResult.ClientID %>').value = true; 
     // POST true to example.aspx doSomething method 
    } else { 
     document.getElementById('<% =hiddenFieldResult.ClientID %>').value = false; 
     // POST false to example.aspx doSomething method 
    } 
} 

趕上它在example.aspx.cs

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

     [WebMethod()] 
     public static string doSomething(boolean Id) 
     { 
      string something = "Hello World!"; 
      return something; 
     } 
    } 
} 

順便說一句,這需要jQuery的。希望它有幫助。