Я использую javascript из ответа на этот вопрос в моем проекте:
Добавление гиперссылок на ValidationSummary
Работает действительно отлично.Я добавил его внизу своей главной страницы (по какой-то причине, даже если он находится внутри $ (document) .ready, Page_Validators имеет значение null, если я помещу его в раздел head)
В любом случае!Я также добавляю несколько пользовательских валидаторов программно при обратной передаче, используя этот код:
public static CustomValidator ReturnErrorMessage(string message, string validationGroup, string controlToValidate = "")
{
CustomValidator control = new CustomValidator();
control.ID = "cv" + controlToValidate;
control.IsValid = false;
control.Text = " ";
control.ValidationGroup = validationGroup;
control.ErrorMessage = message;
control.ControlToValidate = controlToValidate;
return control;
}
Однако всякий раз, когда я добавляю CustomValidator, подобный этому, в событии кнопки, page_load или в любом другом месте, Page_Validators будет переопределен, и сообщение об ошибке будетвернуться к сообщению без якоря.
Что дает?Я делаю что-то не так или кто-то может объяснить, что происходит?
Я попытался отладить его, и он правильно устанавливает значения, но потом просто сбрасывает.
Я пытался, черт возьми, и в $ (document) .ready установить все валидаторы как isvalid = false, и это тоже перезаписывается.
Я использую asp.net 4.5 ненавязчивопроверка, но это не имеет значения, если я ее отключу.
Добавление javascript в код с использованием Page.ClientScript.RegisterStartupScript в какой-то момент после создания валидатора также не работает.
Если я не добавляю валидаторы в код, все работает как положено.
Я знаю, что могу просто добавить теги привязки вручную, но это большая работа по обновлению существующих валидаторов вместо простогодобавив небольшой скрипт, поэтому я надеюсь, что это сработает.
Вы можете использовать этот код для проверки этого:
using System;
using System.Web.UI.WebControls;
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
CustomValidator control = new CustomValidator();
control.ID = "cv" + txtName.ClientID;
control.IsValid = false;
control.Text = " ";
control.ValidationGroup = "errorGroup";
control.ErrorMessage = "Error message";
control.ControlToValidate = txtName.ClientID;
Form.Controls.Add(control);
}
}
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="jquery-3.3.1.min.js"></script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<asp:ValidationSummary ID="vsSummary" runat="server" ValidationGroup="errorGroup" ForeColor="Red" HeaderText="Error!" />
</div>
</form>
<script>
$(document).ready(function() {
var validators = Page_Validators; // returns collection of validators on page
$(validators).each(function() {
//get target control and current error validation message from each validator
//[0] is needed when using aspnet 4.5 unobtrusive validation
var validator = $(this)[0];
var errorMsg = validator.errormessage;
var targetControl = validator.controltovalidate;
//make link only if theres a control to target
if (targetControl) {
var errorMsgWithLink = "<a href='#" + targetControl + "' style='color: #FF3232;'> " + errorMsg + "</a>";
//update error message with anchor tag
validator.errormessage = errorMsgWithLink;
}
});
});
</script>
</body>
</html>