DB から入力するドロップダウン リストがあり、ビジネス ロジックによっては、ドロップダウン リストから選択した項目 (TEXT) をサーバー側の検証で検証できる必要があります。要件は、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;
}