C#方法跳过java脚本调用

时间:2018-05-23 12:26:28

标签: javascript c# asp.net

我有一个ASP按钮,它附有一个事件监听器。按下它时会调用C#方法并执行其中可能包含的任何代码。

我想在侦听器首次执行时调用一个javascript函数。但是,C#完全跳过函数调用并移到它下面的行。

以下是问题:为什么跳过电话?当我只隔离呼叫时,(除了呼叫之外的方法中没有任何东西)IT工作。第二个我把另一行代码放在它下面,它停止被调用。任何帮助将不胜感激。

这是ASP按钮。

<asp:Button ID="crapJim" runat="server" Text="RateTest" OnClick="crapJim_Click"/>

这是C#方法

protected void crapJim_Click(object sender, EventArgs e)
 {
 ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "getSessionName()", true);

/* ClientScript.RegisterStartupScript(GetType(), "hwa", "getSessionName();", true);*/

   string s = hfRaterName.Value;
   Console.Write(s);
   string stop = "";
}

目前已将ClientScript注释掉并尝试使用ScriptManager。两者都是单独工作,但是当其他代码与它一起使用时。我的意思是:

protected void crapJim_Click(object sender, EventArgs e)
 {
 ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "getSessionName()", true);
}

只有这一点才有效,但任何其他代码都可以使用它,它将不再激发。 C#跳过它。

哦,这是我正在使用的Javascript代码。

function getSessionName() {    
      var hfRaterName = prompt("Please enter your session name");
      hfRaterName.value = hfRaterName;
}

2 个答案:

答案 0 :(得分:0)

如果您不必使用RegisterStartupScript,那么这是一种更简单的方法。

的.aspx:

// OnClientClick will call your javascript function first, then the code behind.
<asp:Button ID="btnPrompt" runat="server" Text="Prompt"
    OnClientClick="doPrompt();" 
    OnClick="btnPrompt_Click" />
<br />
<asp:Label ID="lblPromptResult" runat="server"></asp:Label>
<br />
<asp:HiddenField ID="hfPrompt" runat="server" />
<br />

<script>
    function doPrompt() {
        document.getElementById("hfPrompt").value = 
            prompt("Please enter your session name");
    }
</script>

代码背后:

protected void btnPrompt_Click(object sender, EventArgs e)
{
    lblPromptResult.Text = hfPrompt.Value;
}

答案 1 :(得分:0)

如果有其他人遇到同样的问题。我接受了wazz的建议并使用OnclientClick和Onclick。首先执行Javascript而不是让C#调用Javascript。

//This is the HiddenField used to capture the users identified session name
//which I then store in a DB and use in a few other related pages.
<asp:HiddenField ID="HiddenField1" ClientIDMode="Static" runat="server" /> 

//This is the ASP button used to call both the Javascript and C# code behind  
    <asp:Button ID="btnRateBeazely" ClientIDMode="Static" runat="server" CssClass="btnbig" Text="Rate Beazley" OnClick="btnRateBeazely_Click" OnClientClick="getSessionName();" />

//The Javascript is simple, but does exactly what I want it to. DB has character
//limit to 50 so I ensure the user can't input higher than that. Assign the input
//to the hiddenfield ID and off we go.  

function getSessionName() {

var SessionSet = prompt("Please enter your session name"); 

while (SessionSet.length > 49) {
    alert("You have too many characters. Please enter again.")
    var SessionSet = prompt("Please reenter your session name"); 
}

document.getElementById("HiddenField1").value = SessionSet;

}

//In the code behind I just assign a new string variable to the hidden field value