为什么执行了这段代码却忽略了

本文关键字:代码 执行 段代码 为什么 | 更新日期: 2023-09-27 18:03:11

在我的Sharepoint页面中,在表单提交时,元素恢复到原始状态(如果一个复选框在开始时未选中,被用户选中,它将恢复为未选中,等等)。

好了。

但是我想"保存状态"并将这些东西返回到它们原来的方式。其中一个特别的地方是下拉列表的可见性。如果在选择"保存"按钮时它是可见的,那么在提交表单后它应该会恢复可见;这两个下拉列表,在任何给定的时间最多一个是可见的,开始是不可见的,或者更具体地说,像这样"向上滑动":

$(window).load(function () {
    $('[id$=ddlPayToIndividual]').hide();
    $('[id$=ddlPayToVendor]').hide();
});

在尝试保存下拉列表的可见状态时,我添加了bool:

bool paymentToAnIndividualDropDownChosen = false;
bool paymentToAVendorDropDownChosen = false;

…然后在选择Save按钮时分配它们:

private void btnSave_Click(object sender, EventArgs e)
{
    try
    {
        // Note current state of elements, so can be restored after saving/submitting
        paymentToAnIndividualDropDownChosen = rbPaymentToIndividual.Checked;
        paymentToAVendorDropDownChosen = rbPaymentToVendor.Checked;
        . . .
}

然后我尝试在相同处理程序(Save按钮的click事件)的末尾设置它们,如下所示:

if (paymentToAnIndividualDropDownChosen)
{
    //rbPaymentToIndividual.Checked = true; <= This didn't work - jQuery does not respond to programatic clicks!
    ddlPaymentToIndividual.Visible = true;
}

代码到达,可见值设置为true(前提是我在选择Save按钮之前通过检查"rbPaymentToIndividual"使下拉菜单可见,但它没有效果-下拉菜单仍然隐藏。

正如您可以从注释掉的代码中推断出来的那样,我还尝试以编程方式检查单选按钮,该按钮在手动完成时将设置以下客户端代码:

$(document).on("click", '[id$=rbPaymentToIndividual]', function () {
    if (this.checked) {
        $('[id$=ddlPayToVendor]').slideUp();
        $('[id$=ddlPayToIndividual]').slideDown();
    }
});

…但是很明显,jQuery不会响应程序引发的事件。

还是时间问题?是否因为表单仍然处于"提交"阶段/状态,所以这不起作用—客户端或服务器端代码,或者两者都不起作用?

如果这就是问题所在——提交直到Save按钮处理程序退出后才完成,因此我过早地将下拉菜单设置为可见——我可以在哪里放置代码来完成将表单状态设置回到提交之前的状态?Page_Load()事件是执行此操作的地方吗?如果是,是否有一些属性可以询问以确定表单是否刚刚提交?

更新

我将代码移动到Page_Load()事件的末尾,如下所示:

if (Page.IsPostBack) 
{
    if (paymentToAnIndividualDropDownChosen)
    {
        ddlPaymentToIndividual.Visible = true;
    }
} 

…但是,由于整个过程从头开始,paymenttoanindividualdropdownselected的初始值为false,因此我的意图虽然是好的,但与brimstone保持一致。

那么如何才能我恢复到预提交状态-是一个。ini文件,或注册表使用,或Cookie,通常的方式来完成这一点?

更新2

似乎非常奇怪的是,我am能够恢复到一个HTMLTable的预提交状态;以下代码位于Save按钮单击处理程序中:

// Re-visiblize any rows with vals
if (RowContainsVals(3))
{
    foapalrow3.Style["display"] = "table-row";
}
if (RowContainsVals(4))
{
    foapalrow4.Style["display"] = "table-row";
}
if (RowContainsVals(5))
{
    foapalrow5.Style["display"] = "table-row";
}
if (RowContainsVals(6))
{
    foapalrow6.Style["display"] = "table-row";
}

…它工作得很好(显示具有任何值的任何行,尽管在开始时只显示一行)。更奇怪的是:

函数
private bool RowContainsVals(int rownum)
{
    bool rowdirty = false;
    switch (rownum)
    {
        case 3:
            rowdirty = ((!String.IsNullOrEmpty(boxFund2.Text)) ||
                (!String.IsNullOrEmpty(boxIndex2.Text)) ||
                (!String.IsNullOrEmpty(boxOrganization2.Text)) ||
                (!String.IsNullOrEmpty(boxAccount2.Text)) ||
                (!String.IsNullOrEmpty(boxActivity2.Text)) ||
                (!String.IsNullOrEmpty(boxAmount2.Text)));
            break;
        case 4:
            rowdirty = ((!String.IsNullOrEmpty(boxFund3.Text)) ||
            . . .

…查找输入文本框中的值;如果下拉列表的状态是可见的丢失在提交期间,为什么不值在文本框/文本输入丢失?

在雷德蒙德(或其他地方)有些事情很糟糕。

3

更新

作为对的响应,下面是一些与问题中的两个下拉框相关的代码:

Code-behind/c#:

rbPaymentToIndividual = new RadioButton
{
    CssClass = "finaff-webform-field-input",
    ID = "rbPaymentToIndividual"
};
rbPaymentToIndividual.Text = PAYMENT_OR_REIMBURSEMENT_TO_AN_INDIVIDUAL;
rbPaymentToIndividual.GroupName = "paymentTo";
rbPaymentToIndividual.Checked = false;
cellRadioButton1_1.Controls.Add(rbPaymentToIndividual);

rbPaymentToVendor = new RadioButton
{
    CssClass = "finaff-webform-field-input",
    ID = "rbPaymentToVendor"
};
rbPaymentToVendor.Text = PAYMENT_TO_A_VENDOR;
rbPaymentToVendor.GroupName = "paymentTo";
cellRadioButton2_1.Controls.Add(rbPaymentToVendor);

从"View Source"呈现的HTM:

<input id="ctl00_ctl24_g_5f3fedca_19f7_4bc3_b84e_efbef0c48a33_ctl00_rbPaymentToIndividual" type="radio" name="ctl00$ctl24$g_5f3fedca_19f7_4bc3_b84e_efbef0c48a33$ctl00$paymentTo" value="rbPaymentToIndividual" />
<input id="ctl00_ctl24_g_5f3fedca_19f7_4bc3_b84e_efbef0c48a33_ctl00_rbPaymentToVendor" type="radio" name="ctl00$ctl24$g_5f3fedca_19f7_4bc3_b84e_efbef0c48a33$ctl00$paymentTo" value="rbPaymentToVendor" />

为什么执行了这段代码却忽略了

jQuery选择器

选择

:检查

if ($(this).is(':checked'))

应该