我有一个从数据库填充的下拉列表,根据业务逻辑,我需要能够通过服务器端验证来验证下拉列表中的选定项目(文本)。需求状态我不能简单地将其作为 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>
代码背后
protected void ddlPos_Check(object sender, ServerValidateEventArgs args)
{
if (ddPosition.SelectedItem.Text.Contains("some value")
args.IsValid = false;
else
args.IsValid = true;
}