この問題は、あるボタンでは有効で、別のボタンでは機能しません。JavaScriptから別のJavaScript関数を返す可能性のあるコードビハインド関数を呼び出す
ModalPopupを呼び出して、UpdatePanel内のGridViewに新しい行を追加するボタンです。成功した場合は、警告メッセージが表示され、それ以外の場合は例外メッセージが表示されます。コードはModalPopupExtenderにある点を除いて、他のコードと非常に似ています。 EventValidationについて知られている例外をスロー
ボタンは次のようになります:
ウェブ:
<asp:Button ID="btnAlquilar" runat="server" Text="Alquilar" CssClass="AdminButtons"
OnClientClick="Click_Alquilar(); return false"/>
JavaScriptがそれがインデックスは、インデックスのある
function Click_Alquilar() {
if (index == '') {
alert("Debe elegir una película para alquilar");
}
else {
if (confirm("¿Quiere alquilar la película '" + selected.childNodes[2].innerText + "'?")) {
__doPostBack('<%= btnAlquilar.UniqueID %>', index);
}
}
}
を呼び出す関数GridViewで選択された行(同様のアーキテクチャで行われ、うまく動作します)。コードビハインド
は、Page_Loadメソッドで開始し、私はとのトラブルを抱えている関数を呼び出します。
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{...}
else
{
ProcessAjaxPostBack(sender, e);
}
}
private void ProcessAjaxPostBack(object sender, EventArgs e)
{
if ((Request.Params["__EVENTTARGET"] != null) && (Request.Params["__EVENTARGUMENT"] != null))
{
...
if (Request.Params["__EVENTTARGET"] == this.btnAlquilar.UniqueID)
{
index = Convert.ToInt32(Request.Params.Get("__EVENTARGUMENT").TrimStart('r', 'o', 'w'));
btnAlquilar_Click(Request.Params.Get("__EVENTARGUMENT"));
}
}
}
protected void btnAlquilar_Click(string id)
{
string message = "";
if (BAC.BAC.CheckUserAge(lblUserId.Text) < Convert.ToInt32(dgvPeliculas.Rows[index].Cells[7].Text))
{
btnBorrar.Visible = false;
btnEditar.Visible = false;
btnNuevo.Visible = false;
System.Web.UI.ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('No tiene la edad mínima para alquilar la película.')", true);
}
else
{
try
{
BAC.BAC.NewAlquiler(lblUserId.Text, dgvPeliculas.Rows[index].Cells[0].Text, dgvPeliculas.Rows[index].Cells[9].Text);
}
catch (Exception ex)
{
message = Change_ExceptionMessage(ex.Message);
System.Web.UI.ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('No se pudo alquilar la película: " + message + "')", true);
}
}
}
あるRegisterClientScriptBlock方法は、私が行っていない他のボタン(のために使用するのと同じです何かが間違っていると、ポップアップでラベルのテキストが変更され、アラートが表示され、正しい場合はGridViewがロードされ、成功アラートが表示されます)、そこで動作します。ここでは、 "EnableEventValidation is true so ..."という例外がスローされます。レンダリング時にイベント検証のためにこのボタンを登録しました:
protected override void Render(HtmlTextWriter writer)
{
this.Page.ClientScript.RegisterForEventValidation(btnAlquilar.UniqueID);
base.Render(writer);
}
なぜここでこれが起こりますか?なぜ今はうまくいかないのですか?
EDIT:ModalPopupの作業ボタンで変更されたラベルがUpdatePanelにラップされていることを確認しました。私はそれが重要かどうかわからないが、それをメモするだけである。
EDIT2:ページはマスターページ内でも機能します。それがどんな使い方であるかわからない。私は、UpdatePanelsと、AsyncPostBackTriggerを使用して、編集ボタンとGridViewをラップしようとしましたが、まだ同じ例外が発生します。