У меня есть раскрывающийся список, который я заполняю из БД, и в зависимости от бизнес-логики мне нужно иметь возможность проверить выбранный элемент (ТЕКСТ) из раскрывающегося списка с проверкой на стороне сервера. Состояние требований Я не могу просто отфильтровать его как часть инструкции SQL. Решение, которое я пытался заставить работать, состоит в том, чтобы просто создать пользовательскую проверку в коде позади.
Вызывается проверка, НО я не могу понять, как ссылаться на значение ddl DataTextField для выбранного элемента. Когда я пытаюсь выполнить код на стороне сервера ниже, система asp.net заявляет, что мой раскрывающийся список не существует в подробном представлении, и в результате подчеркивается красным. В этом случае это всегда будет режим вставки.
Предложения
Код ASP
<asp:DetailsView ID="dtlSample" runat="server" AutoGenerateEditButton="true" AutoGenerateRows="false">
<Fields>
. . .
<asp:TemplateField HeaderText="Position">
<ItemTemplate>
<%# Eval("Age") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlPosition" runat="server" AutoPostBack="True"
LDataSource="Select Position, PositionId from ...." DataTextField="Position" DataValueField="PositionId"
></asp:DropDownList>
</EditItemTemplate>
<InsertItemTemplate>
<asp:DropDownList ID="ddlPosition" runat="server" AutoPostBack="True"
LDataSource="Select Position, PositionId from ...." DataTextField="Position" DataValueField="PositionId"
></asp:DropDownList>
</InsertItemTemplate>
<asp:CustomValidator ID="cvPos" Display="Dynamic" ControlToValidate = "DDLPosition"
OnServerValidate="ddlPos_Check" runat="server" ForeColor="Red" ErrorMessage="My error message"></asp:CustomValidator>
</asp:TemplateField>
</Fields>
CODE BEHIND
protected void ddlPos_Check(object sender, ServerValidateEventArgs args)
{
if (ddPosition.SelectedItem.Text.Contains("some value")
args.IsValid = false;
else
args.IsValid = true;
}