1

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;    

}

4

1 に答える 1

1

マーフィーの法則、数時間後に自分の質問に答えてください。

        DropDownList ddlList=DetailsView2.FindControl("ddlPosition") as DropDownList;

        if (ddlList != null)
        {

            if (ddlList.SelectedItem.Text.Contains("text")) {
                        args.IsValid = false;    
            }
             else
            {
                   args.IsValid = true;
            }

        }    
于 2013-10-16T20:59:25.517 に答える