我有一个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;
}
答案 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