У меня есть кнопка на моей веб-странице aspx, которую нужно «щелкнуть» в моем коде за кодом С #. Затем метод OnClientClick вызывает диалоговое окно подтверждения JS, и поэтому функция btn_Click запускается только тогда, когда пользователь нажимает «ОК» ...
Пока это мой код: Вариант 1
aspx:
<asp:Button runat="server" ID="btnConfirm" Text="Confirm" OnClick="btnConfirm_Click" />
aspx.cs:
protected void Page_Load(object sender, EventArgs e)
{
// set OnClientClick
btnConfirm.OnClientClick = "confirm('Save in DB?');";
// invoke method
Type t = typeof(System.Web.UI.WebControls.Button);
object[] p = new object[1];
p[0] = EventArgs.Empty;
MethodInfo m = t.GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance);
m.Invoke(btnConfirm, p);
}
protected void btnConfirm_Click(object sender, EventArgs e)
{
//save something in database
}
Получил образцы кода от: http://forums.asp.net/t/1046550.aspx?How+do+you+raise+a+button+click+event+from+outside+the+button+
Я хочу вызвать метод OnClientClick, но когда я заменяю OnClick на OnClientClick, появляется эта ошибка:
Исключение System.NullReferenceException не было обработано пользовательским кодом. Сообщение = Ссылка на объект не установлена на экземпляр объекта.
Изменить: Вариант 2:
Я пытался переписать свою программу так: aspx:
<script language="javascript">
function invokeButtonClick() {
document.getElementById("btnConfirm").click();
}
function Validate() {
return confirm('Save in db?');
}
</script>
<asp:Button runat="server" ID="btnConfirm" Text="Confirm" OnClick="btnConfirm_Click" OnClientClick="return Validate();" />
aspx: cs:
protected void Page_Load(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(this, GetType(), "InvokeButton", "invokeButtonClick();", true);
}
protected void btnConfirm_Click(object sender, EventArgs e)
{
// save something in database
}
Но затем обратная передача страницы перед вызовом моей функции btnConfirm_Click ...
Спасибо,
Майкл