У меня есть Javascript на стороне клиента, который я использую на странице ASP.NET, чтобы установить видимость нескольких элементов в datalist. В принципе, когда элемент 1 виден, элемент 2 должен быть скрыт и наоборот. Этот код также позволяет/отключает некоторые обязательные проверки валидатора ASP.NET в зависимости от видимости полей вокруг них на стороне клиента.Ошибка проверки ASP.NET - отображаемые элементы меняют видимость
Код работает нормально , если у меня нет ошибки проверки ASP.NET. Когда проверка не удалась, поля сбрасываются до видимости по умолчанию (скрыты).
Я исключал это, так как мои контрольные точки на стороне сервера не попадают, когда возникает проблема. Это похоже на скрипт на стороне клиента.
Исправления на стороне сервера отсутствуют, поскольку страница никогда не отправляет сообщения назад. Мне интересно, как я могу это сделать с точки зрения Javascript? Есть ли способ запускать пользовательский код при запуске сценариев проверки подлинности?
Я думал об использовании файла cookie, но я не думаю, что это поможет мне, если я не могу подключиться к событию проверки.
код следует ...
function handleDropDown(e, a, b, c, v1, v2, h1, h2) {
var i = parseInt(c) + 2;
var x = parseInt(c) + 3;
if (e.value == "Yes") {
document.getElementById(i).style.display = "inline";
document.getElementById(i).style.visibility = "visible";
document.getElementById(x).style.display = "none";
document.getElementById(x).style.visibility = "hidden";
document.getElementById(a).focus();
//Enable validator if needed
var oVal1 = document.getElementById(v1);
var oVal2 = document.getElementById(v2);
var oVis1 = document.getElementById(h1);
var oVis2 = document.getElementById(h2);
ValidatorEnable(oVal1, true);
if (oVis1 != null) {
oVis1.value = "true";
}
ValidatorEnable(oVal2, false);
if (oVis2 != null) {
oVis2.value = "false";
}
}
else if (e.value == "No") {
document.getElementById(x).style.display = "inline";
document.getElementById(x).style.visibility = "visible";
document.getElementById(i).style.display = "none";
document.getElementById(i).style.visibility = "hidden";
document.getElementById(b).focus();
//Enable validator if needed
var oVal1 = document.getElementById(v1);
var oVal2 = document.getElementById(v2);
var oVis1 = document.getElementById(h1);
var oVis2 = document.getElementById(h2);
ValidatorEnable(oVal1, false);
if (oVis1 != null) {
oVis1.value = "false";
}
ValidatorEnable(oVal2, true);
if (oVis2 != null) {
oVis2.value = "true";
}
}
}
ASPX Markup сниппет: **
<span id="spTxtAnswer" class="required" visible="false" runat="server">*</span>
<asp:TextBox ID="txtAnswer" Text='<%# Bind("Answer") %>' runat="server"
TextMode="MultiLine" Height="76px" MaxLength="2000" Width="370px" Visible="false" >
</asp:TextBox>
<asp:RequiredFieldValidator ID="valTextBox" ErrorMessage="This question is required." Enabled="false"
Display="Static" ControlToValidate="txtAnswer" runat="server" ValidationGroup="Request" />
<asp:RequiredFieldValidator ID="valAnswer" ControlToValidate="txtAnswer" ErrorMessage="<br />Other description is required."
Display="Static" enabled="false" runat="server" ValidationGroup="Request" />
<span id="spDdlAnswer" class="required" visible="false" runat="server">*</span>
<asp:DropDownList ID="ddlAnswer" Visible="false" runat="server" />
<asp:RequiredFieldValidator ID="valDropDown" ControlToValidate="ddlAnswer" Enabled="false"
ErrorMessage="This field is required." Display="Static" runat="server"
InitialValue="(Select)" ValidationGroup="Request" />
<asp:HiddenField ID="hfQuestionID" Value='<%# Bind("QuestionID") %>' runat="server" />
<asp:HiddenField ID="hfAnswer" Value='<%# Bind("Answer") %>' runat="server" />
<asp:HiddenField ID="hfRequired" Value='<%# Bind("Required") %>' runat="server" />
<asp:HiddenField ID="hfVisible" Value="false" runat="server" />
CodeBehind сниппет:
TextBox tb1 = (TextBox)gridUserSupplierTypeQuestionsAndAnswers.Rows[rowIndex + 1].FindControl("txtAnswer");
TextBox tb2 = (TextBox)gridUserSupplierTypeQuestionsAndAnswers.Rows[rowIndex + 2].FindControl("txtAnswer");
RequiredFieldValidator rfv1 = (RequiredFieldValidator)gridUserSupplierTypeQuestionsAndAnswers.Rows[rowIndex + 1].FindControl("valTextBox");
RequiredFieldValidator rfv2 = (RequiredFieldValidator)gridUserSupplierTypeQuestionsAndAnswers.Rows[rowIndex + 2].FindControl("valTextBox");
HiddenField hf1 = (HiddenField)gridUserSupplierTypeQuestionsAndAnswers.Rows[rowIndex + 1].FindControl("hfVisible");
HiddenField hf2 = (HiddenField)gridUserSupplierTypeQuestionsAndAnswers.Rows[rowIndex + 2].FindControl("hfVisible");
ddl.Attributes.Add("onchange", "handleDropDown(this,'" + tb1.ClientID + "','" + tb2.ClientID + "','" + questionID + "','" + rfv1.ClientID + "','" + rfv2.ClientID + "'," +
"'" + hf1.ClientID + "','" + hf2.ClientID + "');");
//When selected and viewing in edit mode, set the visibility during page load
string script = "<script language='javascript'>";
script += System.Environment.NewLine + "var el = document.getElementById('" + ddl.ClientID + "');";
script += System.Environment.NewLine + "handleDropDown(el,'" + tb1.ClientID + "','" + tb2.ClientID + "','" + questionID + "','" + rfv1.ClientID + "','" + rfv2.ClientID + "');</script>";
ClientScript.RegisterStartupScript(Page.GetType(),"startScript", script);
**
Вы можете показать фрагмент разметки aspx с помощью валидаторов на месте? я подозреваю, что ваша проверка действительно происходит на стороне сервера. Вы поставили точку останова в первой строке в обработчике событий Page_Load? – woohoo