[英]asp.net button.onclientclick and button.text empty in jquery dialog
我有一個控件,應提示用戶選擇會話的customerId或頁面的舊ViewState customerId。 如果viewstate中的值與會話中的值不匹配,則會出現jQuery模式對話框。 該對話框有兩個按鈕,一個應顯示ViewState值,另一個應顯示會話值。 具有ViewState值的按鈕也具有OnClientClick屬性。 我已經用一個僅包含一個按鈕和我的控件的簡單測試頁測試了此代碼。 簡單的測試頁就可以了。 當我將此控件添加到現有頁面時,可以顯示對話框,但是button.text(在后面的代碼中分配)為空,並且不會觸發OnClientClick函數。
ascx
<script type="text/javascript">
function ShowCustomerChangedModalDialog() {
var dlg = $("#CustomerChangedModal").dialog({
title: 'Select Customer ID',
resizable: false,
modal: true
});
dlg.parent().appendTo(jQuery("form:first"));
};
function changeCustomer(customerId, baseUrl) {
$.ajax({ url: "/General/Accounts/change.account?id=" + customerId + "&admin=false", async: false });
$("#CustomerChangedModal").dialog('close');
return false;
}
</script>
<div id="CustomerChangedModal" style="width: 440px; height: 250px; overflow: auto; display: none;">
The session information has changed.
Which account ID do you wish to use?
<br />
<br />
<asp:Button ID="btnNewCustId" runat="server" OnClick="btnNewCustId_Click" />
<asp:Button ID="btnOldCustId" runat="server" />
</div>
背后的代碼
public partial class CustomerChanged : System.Web.UI.UserControl
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
this.Page.PreLoad += Page_PreLoad;
}
void Page_PreLoad(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState.Add("CustID", Globals.CurrentCust.CustId);
}
if (IsPostBack)
{
Page.Validate();
ValidateCustomerId();
}
}
protected void ValidateCustomerId()
{
if (Convert.ToInt32(ViewState["CustID"]) != Globals.CurrentCust.CustId)
{
//button properties assignments
btnOldCustId.Text += "Old AccountId\n" + ViewState["CustID"].ToString();
btnNewCustId.Text += "New AccountId\n" + Globals.CurrentCust.CustId.ToString();
btnOldCustId.OnClientClick = string.Format("return changeCustomer({0},'{1}');", ViewState["CustID"].ToString(), Globals.GeneralSiteUrl);
CustomValidator err = new CustomValidator();
err.IsValid = false;
err.ErrorMessage = "The customer has changed.";
Page.Validators.Add(err);
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
if (!Page.IsValid)
{
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "CustomerChangedModalDialog", "ShowCustomerChangedModalDialog();", true);
}
}
}
protected void btnNewCustId_Click(object sender, EventArgs e)
{
Response.Redirect(Request.RawUrl);
}
}
任何幫助,將不勝感激。
我停止嘗試使用服務器端代碼,並切換到javascript以分配按鈕文本並使用新的customerId重新加載頁面。 這不能回答我的問題,為什么服務器端的屬性表現不如我預期的那樣,但是現在可以完成工作。
var div = $("#CustomerChangedModal");
var oldButton = $("[id$=btnOldCustId]", div);
var newButton = $("[id$=btnNewCustId]", div);
newButton.val("New AccountId " + newId);
oldButton.val("Old AccountId " + oldId);
newButton.on("click", function (event) { changeCustomerNew(newId) });
oldButton.on("click", function (event) { changeCustomerOld(oldId) });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.