ASP.NET フォームに 2 つのボタン (データを保存するためのボタン、次のステップに進むためのボタン) があり、ユーザーが [続行] をクリックすると jQuery-ui モーダル ダイアログがポップアップするようにしようとしています。 " 最初に保存せずに。うまくいきません。とにかく、常に次のステップに進みます。これは、TabPanels を含む Ajax TabContainer を含むフォームであり、作業にレンチを投げている可能性があると思われます。私のコードの関連部分は次のとおりです。
.aspx マークアップ:
<ajaxToolkit:TabContainer ID="tabContainerRenewal" runat="server" OnClientActiveTabChanged="GetOrigAddrData" OnActiveTabChanged="tabContainerRenewal_ActiveTabChanged">
<ajaxToolkit:TabPanel ID="tabVerifyAddress" runat="server" ScrollBars="Auto" OnLoad="tabVerifyAddress_Load">
<HeaderTemplate>Step 2: Address Verification</HeaderTemplate>
<ContentTemplate>
<table class="bordered">
<tr>
<th class="rightAlign">Company:</th>
<td colspan="2"><asp:TextBox ID="tbxCompany" runat="server" Columns="50" CssClass="editAddress"></asp:TextBox></td>
<th class="rightAlign">Position:</th>
<td colspan="2"><asp:TextBox ID="tbxPosition" runat="server" Columns="50" CssClass="editAddress"></asp:TextBox></td>
...
<div class="buttonRow">
<asp:Button ID="btnUpdateInfo" runat="server" Text="Update My Information" OnClick="btnUpdateInfo_Click" />
<asp:Button ID="btnContinueNoUpdate" runat="server" Text="Continue" OnClick="btnContinueNoUpdate_Click" OnClientClick="return ContinueNoUpdateCheck(this);" />
</div>
Javascript/jquery 関数:
<script type="text/javascript">
//Check to see if user has changed any address data when continuing without update and
// display a dialog if they have
var continueConfirmed = false;
function ContinueNoUpdateCheck(obj) {
if ($('.editAddress').serialize() != origAddrData) {
var changeTitle = "Data has been changed";
var changeText = "You have updated information on this form. Are you sure you wish to continue without saving?";
//add the dialog div to the page
$('body').append(String.Format("<div id='changeDialog' title='{0}'><p>{1}</p></div>", changeTitle, changeText));
//create the dialog
$('#changeDialog').dialog({
width: 400,
height: "auto",
modal: true,
resizable: false,
draggable: false,
close: function (event, ui) { $('body').find('#changeDialog').remove(); },
buttons: {
'Yes, continue without saving': function () {
$(this).dialog('close');
continueConfirmed = true;
if (obj) obj.click();
},
'No, let me save': function () {
$(this).dialog('close');
}
}
});
}
return continueConfirmed;
}
//Get original address form data for comparison
function GetOrigAddrData() {
//First find out which tab we're on; we're only concerned with tab 1 (verify address)
// get TabContainer object
var container = $('<%= tabContainerRenewal.ClientID %>');
switch (container.ActiveTabIndex) {
case 1:
var origAddrData = $('.editAddress').serialize();
break;
default:
break;
}
}
</script>
"String.Format" は、別のファイルに記述した Javascript 関数です。いつも使っているので問題ないと思います。
C# コードはまったく興味深いものではありません。
protected void btnContinueNoUpdate_Click(object sender, EventArgs e)
{
//User has elected to not change any data, so we simply advance to certification
// without validation (disable address verification tab)
AdvanceToNextTab();
} //end method btnContinueNoUpdate_Click
protected void AdvanceToNextTab()
{
//Advance to the next tab in the TabContainer
//Total number of tabs in container
int tabCount = tabContainerRenewal.Tabs.Count;
//Index of currently active tab
int currTab = tabContainerRenewal.ActiveTabIndex;
//Advance if we're not already on the last tab
if (currTab < tabCount - 1)
{
tabContainerRenewal.ActiveTabIndex = currTab + 1;
tabContainerRenewal.Tabs[currTab + 1].Enabled = true;
//Disable the tab we were just on so they can't go back
tabContainerRenewal.Tabs[currTab].Enabled = false;
}
} //end method AdvanceToNextTab
それで、何かアイデアはありますか?私は一日中これに取り組んできましたが、成功しませんでした。
これがコンテキストのスクリーンショットです...