0

複数のユーザーコントロールをリンクしているページがあります。ユーザー コントロールには、アタッチ、クリア、表示の 3 つのボタンがあります。ユーザーがページ上の任意のコントロールをクリックすると、結果の情報がページ上の最後の表示コントロールに「ダンプ」されます。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" MasterPageFile="DefaultPage.master" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>
<%@ Register tagName="FileHandler" src="FileHandling.ascx" tagPrefix="ucFile" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Main" Runat="Server">
<asp:UpdatePanel ID="upPanel" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<table>
<tr>
<td>
<ucFile:FileHandler ID="fFile1" runat="server" />
</td>
<td>
<ucFile:FileHandler ID="fFile2" runat="server" />
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>

すべてのファイルの取り扱いと処理はコントロール内で処理され、ファイル サーバーへのアップロードが完了すると、生成されたファイル名を介してイベントが発生します。いずれかのボタンがクリックされると、ファイル名は常に最後のコントロールのテキスト ボックス内のコントロールの内部に保存されます。制御コード:

<table style="width: 50%;">
    <tr style="white-space: nowrap;">
        <td style="width: 1%;">
            <asp:Label runat="server" ID="lblFile" />
        </td>
        <td style="width: 20%;">
           <asp:TextBox ID="txtFile" CssClass="backColor" runat="server" OnTextChanged="FileInformationChanged" />
        </td>
        <td style="width: 1%">
            <%--<asp:Button runat="server" ID="btnUpload" CssClass="btn" Text="Attach"  OnClick="UploadFile"/>--%>
            <input type="button" id="btnUpload" class="btn" tabindex="30" value="Attach" onclick="SetupUpload();" />
        </td>
        <td style="width: 1%">
            <%--<asp:Button runat="server" ID="btnClear" Text="Clear" CssClass="btn" OnClick="ClearTextValue"/>--%>
            <input type="button" id="btnClearFile" class="btn" value="Clear" onclick="document.getElementById('<%=txtFile.ClientID%>').value = '';document.getElementById('<%=hfFile.ClientID%>').value = '';" />
        </td>
        <td style="width: 1%">
            <a href="#here" onclick="ViewLink(document.getElementById('<%=hfFile.ClientID%>').value, '')">View</a>
        </td>
        <td style="width: 1%">
            <asp:HiddenField ID="hfFile" runat="server" />
        </td>
    </tr>
</table>
<script type="text/javascript">
    var ItemPath = "";
    function SetupUpload(File) {
        ItemPath = File;
        VersionAttach('<%=UploadPath%>', 'true');
    }
    function UploadComplete(File) {
        document.getElementById('<%=txtFile.ClientID%>').value =  File.substring(File.lastIndexOf("/") + 1);
        document.getElementById('<%=hfFile.ClientID%>').value = File;
        alert('<%=txtFile.Text %>');
        alert('<%=ClientID %>')
    }
    function ViewLink(File, Alert) {
        if (File != "") {
            if (File.indexOf("../data/") != -1) {
                window.open(File, '_blank');
            }
            else {
                window.open('../data/<%=UploadPath%>/' + File, '_blank');
            }
        }
        else if (Alert == "") {
            alert('No file has been uploaded for this field.');
        }
    }
</script>
4

2 に答える 2

0

私の場合、これを機能させる方法は、入力ボタン(クライアントコントロール)にタイトルを付けてから、必要なコントロール(この場合はテキストボックス)のclientidの値をonclickイベントの関数に渡すことでした。 (クライアントイベント)。次に、ボタンがクリックされたときに、コントロールのコンシューマーにこの情報を使用するように「強制」します。ここでの質問の理由は、コントロールのコンシューマーにデータを処理させるのではなく、コントロール内でこれを実現するためのより良い方法があるかどうかを調べることでした。これは私の目的には機能しますが、私が望んでいたほどきれいではないようです。

于 2013-02-01T21:18:09.617 に答える
0

いくつかの方法があります

a)control.FindControl( "hfFile")を使用します

b)

private HiddenField hfFile;
protected void hfFile_OnInit(object sender, EventArgs e){
    hfFile = (HiddenField)sender;
}
于 2012-11-07T22:56:25.397 に答える