为什么这段代码被执行但被忽略了?

时间:2015-07-16 21:57:27

标签: c# jquery sharepoint-2010 form-submit pageload

在我的Sharepoint页面中,在表单提交时,元素将恢复为原始状态(如果取消选中未选中的复选框,则由用户检查,它将恢复为未选中状态等)。

足够公平。

但我想"拯救国家"并将这些事情归还给他们。有一点特别是Dropdownlist的可见性。如果在" Save"按钮被选中后,应该在提交表单后返回可见;两个DropDownLists,其中至多一个在任何给定的时间都是可见的,开始是不可见的,或者更具体地,"滑动"像这样:

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

在尝试保存DropDownLists的可见状态时,我添加了bool:

bool paymentToAnIndividualDropDownChosen = false;
bool paymentToAVendorDropDownChosen = false;

...然后在选择“保存”按钮时指定它们:

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;
        . . .
}

然后我尝试将它们设置回同一个处理程序的末尾(“保存”按钮的点击事件),如下所示:

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

代码已到达,Visible值设置为true(前提是我通过检查&#34; rbPaymentToIndividual&#34;在选择Save按钮之前显示下拉列表,但它没有效果 - 下拉列表仍然隐藏

正如你可以从注释掉的代码中推断出来的那样,我也尝试以编程方式检查radiobutton,当手动完成时,它会引发以下客户端代码:

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

...但显然jQuery不会对编程引发的事件做出反应。

或者是时间问题?是因为表单仍然在&#34;提交&#34;阶段/状态,这是不起作用 - 客户端或服务器端代码,或两者兼而有?

如果这是问题 - 提交在完成Save按钮处理程序退出之后才会完成,因此我将DropDown设置为太快显示 - 我可以在哪里放置代码来完成此设置形式状态回到提交之前的状态? Page_Load()事件是否可以执行此操作,如果是,是否有一些属性可以查询以确定表单是否刚刚提交?

更新

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

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

...但是,因为整个shebang开始新鲜,所以看到了payAoIndividualDropDownChosen的初始值false,所以我的意图虽然好,却与硫磺保持联系。

那么 我将如何恢复到预提交状态 - 是.INI文件,还是注册表用法,或Cookie,这是实现此目的的常用方法?

更新2

这似乎很奇怪,我能够恢复到HTMLTable的预提交状态;此代码位于“保存”按钮单击处理程序中:

// 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";
}

...并且它工作正常(显示任何带有任何val的行,但在开头时,只显示一行)。也许,更奇怪的是功能:

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)) ||
            . . .

...在输入文本框中查找值;如果DropdownList的状态在提交过程中丢失,为什么TextBoxes / text输入中的值不会丢失?

雷德蒙德(或其他地方)有些东西烂了。

更新3

作为回应,这里有一些与相关的两个下拉列表相关的代码:

代码隐藏/ 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);

从&#34;查看来源&#34;:

呈现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" />

1 个答案:

答案 0 :(得分:1)

jQuery Selector

:checked Selector

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

应该有效