为什么执行了这段代码却忽略了
本文关键字:代码 执行 段代码 为什么 | 更新日期: 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'))
应该