我有一个从数据库中填充的下拉列表,根据业务逻辑,我需要能够从服务器端vaildation的下拉列表中验证所选项目(TEXT)。需求状态我不能简单地将其作为SQL语句的一部分进行过滤。我一直试图解决的解决方案是在后面的代码中创建一个自定义验证。
调用验证,但我无法弄清楚如何引用所选项目的ddl DataTextField值。当我尝试在asp.net系统下面执行服务器端代码时,表明我的下拉列表在详细信息视图中不存在,并提供红色下划线作为结果。在这种情况下,它将始终是insertmode。
建议
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;
}
答案 0 :(得分:1)
墨菲定律,几小时后回答你自己的问题。
DropDownList ddlList=DetailsView2.FindControl("ddlPosition") as DropDownList;
if (ddlList != null)
{
if (ddlList.SelectedItem.Text.Contains("text")) {
args.IsValid = false;
}
else
{
args.IsValid = true;
}
}