以下は、すべての主要なブラウザで機能する@ampersandreの人気のあるソリューションの簡易バージョンです。Asp.NETマークアップ
<asp:TextBox runat="server" ID="FilePath" CssClass="form-control"
style="float:left; display:inline; margin-right:5px; width:300px"
ReadOnly="True" ClientIDMode="Static" />
<div class="inputWrapper">
<div id="UploadFile" style="height:38px; font-size:16px;
text-align:center">Upload File</div>
<div>
<input name="FileUpload" id="FileInput" runat="server"
type="File" />
</div>
</div>
<asp:Button ID="UploadButton" runat="server"
style="display:none" OnClick="UploadButton_Click" />
</div>
<asp:HiddenField ID="hdnFileName" runat="server" ClientIDMode="Static" />
jQueryコード
$(document).ready(function () {
$('#UploadFile').click(function () {
alert('UploadFile clicked');
$('[id$="FileInput"]').trigger('click');
});
$('[id$="FileInput"]').change(function (event) {
var target = event.target;
var tmpFile = target.files[0].name;
alert('FileInput changed:' + tmpFile);
if (tmpFile.length > 0) {
$('#hdnFileName').val(tmpFile);
}
$('[id$="UploadButton"]').trigger('click');
});
});
CSSコード
.inputWrapper {
height: 38px;
width: 102px;
overflow: hidden;
position: relative;
padding: 6px 6px;
cursor: pointer;
white-space:nowrap;
/*Using a background color, but you can use a background image to represent
a button*/
background-color: #DEDEDE;
border: 1px solid gray;
border-radius: 4px;
-moz-user-select: none;
-ms-user-select: none;
-webkit-user-select: none;
user-select: none;
}
非表示の「UploadButton」クリックトリガーを標準のサーバーポストバックに使用します。with "Upload File"テキストは、オーバーフローしたときにラッパーdivの入力コントロールをビューの外に押し出すため、 "file input"コントロールdivにスタイルを適用する必要はありません。$([id $ = "FileInput"])セレクターは、標準のASP.NETプレフィックスが適用されたIDのセクションを許可します。ファイルがアップロードされると、FilePathテキストボックスの値は、hdnFileName.Valueの後ろのサーバーコードから設定されます。