0

セッションのcustomerIdまたはページの古いViewStatecustomerIdのいずれかを選択するようにユーザーに促すコントロールがあります。ビューステートの値がセッションの値と一致しない場合、jQueryモーダルダイアログが表示されます。ダイアログには2つのボタンがあり、1つはViewState値を表示し、もう1つはセッション値を表示する必要があります。ViewState値を持つボタンには、OnClientClickプロパティもあります。このコードは、ボタン1つとコントロールのみを含む簡単なテストページでテストしました。簡単なテストページが機能しました。このコントロールを既存のページに追加すると、ダイアログを表示できましたが、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);
    }

}

どんな助けでもいただければ幸いです。

4

1 に答える 1

0

サーバー側のコードの使用をやめ、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) });
于 2013-01-16T14:16:58.280 に答える