验证网格视图中的文件输入控件

时间:2014-04-03 08:37:23

标签: jquery asp.net

我有一个GridView控件,其中我有一些Fileupload控件(控件数量各不相同), 对于文件上传,我在GridView中有文件上传控件的按钮,在用户上传文件后,他点击了GridView之外的完成。我需要在单击Finish时应用验证,用户必须在单击Finish之前上载所有文件。 GridView在WizardControl中,Finish按钮是Wizard的Finsihed按钮

<asp:GridView ID="Grid1" runat="server" AutoGenerateColumns="false" OnRowCommand="Grid1_RowCommand" CssClass="table">
    <Columns>
        <asp:TemplateField HeaderText="Data" ItemStyle-HorizontalAlign="Left">
            <ItemTemplate>
                <div class="col-5" id="statdiv">
                    <asp:Label ID="lbl1" runat="server" Text="Statement" CssClass="fieldheadingStyle"></asp:Label>
                    <asp:FileUpload ID="filestatement" runat="server" Width="98%" CssClass="filestat" />
                    <asp:Label ID="lblstatement" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "StatementFile") %>' CssClass="lblstat"></asp:Label>
                </div>
                <div class="col-5" id="courtdiv">
                    <asp:Label ID="Label1" runat="server" Text="Document" CssClass="fieldheadingStyle"></asp:Label>
                    <asp:FileUpload ID="doc" runat="server" Width="98%" CssClass="filedoc" />
                    <asp:Label ID="lblcourtdoc" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "DocumentFile") %>' CssClass="lbldoc"></asp:Label>
                </div>
                <div class="col-2">
                    <asp:Button ID="btnuploadfiles" runat="server" CommandName="uploadfiles" Text="Upload" />
                </div>

            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

如何在点击完成时验证所有文件控件?

这是我在向导控件中的完成按钮

<FinishNavigationTemplate>
    <table class="WizardButtonRow" cellspacing="0">
        <tr>
            <td align="left">
                &nbsp;
            </td>
            <td align="right">
                <asp:Button ID="btnFinish" runat="server" Text="Finish" CausesValidation="true" CommandName="MoveComplete" />
            </td>
        </tr>
    </table>
</FinishNavigationTemplate>

我试过这个但是说btnFinish没找到

   $("#<%=btnFinish.ClientID%>").click(function(){
});

1 个答案:

答案 0 :(得分:0)

你的复杂性是向导控制。它只使页面的一部分可供客户端使用,因此JS只能与这个特定的可见部分进行通信。一种方法是使用基于JS的向导语法,一次只显示一个部分。您可以为每个部分使用div并隐藏不活动的部分。这将使JS能够访问所有元素,因为它们仍在DOM中。

此外,请注意,在浏览器中查看页面后,为fileupload控件生成的html标记很重要。这将有助于理解您的页面呈现,它可以帮助按照每个控件使用的id的顺序,这样您就可以使用正确的id并选择每个并检查它是否有文件。

如果您使用的是.NET Framework 4.0(vs2010)及更高版本,则可以使用asp.net控制标记设置clientidmode = static。这将确保您指定的id是html的呈现ID。有了这个,你可以用这个

选择btnfinish
  $('#btnfinish').click(function(){

   });

或者,使用JQuery,您可以在gridview模板中为文件上载(仅限)设置相同的cssclass。完成后,您可以选择该类的所有元素。这将返回fileupload控件的集合,这可以通过&#39;每个&#39;来循环。 Jquery中的函数。

 $('.fileuploadClass').each(function(){ //cycle through all file upload with specified cssclass
   if ($(this).val()==''){ //check of it has a file
         alert('select file');
         return;
      }
 });