在我的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,这是实现此目的的常用方法?
这似乎很奇怪,我我能够恢复到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输入中的值不会丢失?
雷德蒙德(或其他地方)有些东西烂了。
作为回应,这里有一些与相关的两个下拉列表相关的代码:
代码隐藏/ 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" />