درود و عرض ادب
من احتیاج داشتم که فایلی رو با کلیک روی یک دکمه آپلود کنم
پروژه را با Asp.net 2008 نوشتم
با توجه به راهنمایی سایت stackoverflow باید روتینی با جاوا اسکریپت بدین شکل می نوشتم
function UpF()
{
var fu=document.getElementById('<%= AttachFile.ClientID %>');
fu.click();
}
این روتین درست کار می کند و پنجره انتخاب فایل رو باز می کنه اما مشکل اینجاست تا پنجره انتخاب فایل باز می شود روتین موجود در دکمه در asp چک شدن لود فایل را انجام می دهد یعنی هنوز فایل انتخاب نشده روتین asp اعلام می کند فایلی انتخاب نشد. اگر با alert یک توقف در خط آخر روتین جاوا بگذارم مشکل حله اما می خواهم بدون alert کار انجام بشه چون کاربر دچار نوعی سردرگمی میشه در بسیاری از سایتها دیده ام که راحت با کلیک روی یک دکمه این کار انجام میشه.
شما از رویداد click استفاده کردید. باید از رویداد onchange استفاده کنید.
document.getElementById("file").onchange = function() {
document.getElementById("form").submit();
};
جناب محمد تشکر از پاسختان
اما متاسفانه با کپی کردن سورس شما به داخل پروژه ام نتیجه ای حاصل نشد شاید ضعف از توضیح من بوده که دقیقتر بیان می کنم
دکمه من در Asp.net یک button سمت سرور است که اواین خط آن تست می کند که ابا فایل آپلود شده یا نه و اگر نشده بود همان جا از روتین خارج میشود اگر از دکمه سمت کلاینک استفاده کنم ( یعنی دستور input) از رویداد onchange ایراد می گیرد و اعلام می کند که ناشناخته است که ظاهرا مشکل از اختلاف ورژن html می باشد.
برنامه از سورس شما ایرادی نگرفت اما حتی پنجره انتخاب فایل هم باز نشد.
واسه اینکه جواب سریع و بهتری تری بگیرید، همیشه سعی کنید کدهاتون هم بزارید.
من به صورت کلی توضیح میدم، شما کدهاتون رو براساس این توضیحات تغییر بدید.
به صورت معمول برای آپلود فایل ما یه button و یه file upload برای انتخاب فایل میزاریم. در این حالت شما ابتدا با file Upload فایل رو انتخاب و سپس با button، فایل رو آپلود می کنید.
ولی در سناریو شما، دیگه نیازی به button نیست و با یک file upload و کدهای جوااسکریپ این عمل انجام میشه. به این شکل که میگیم بعد از انتخاب فایل، form مربوطه که file upload داخلش هست رو submit کن.
Form With File Upload:
<form id="myForm" action="/action_page.php" > <input type="file" id="myFile" name="filename" /> <input type="submit"/> </form> </code></pre>
javascript:
document.addEventListener("DOMContentLoaded", function(event) {
document.getElementById("myFile").onchange = function() {
document.getElementById("myForm").submit();
};
});
مورد دیگه اینکه اعتبارسنجی اینکه فایل آپلود شده یا نه رو هم میتونید با همین جاوا اسکریت انجام بدید.
ممنون من این رو حتما انجام میدم اما این توضیح هم بدم که تمام کنترل های من سمت سرور هستند و مثلا چک کردن شرط Myfile.hasfile امکان پذیر نیست چون شما Myfile رو سمت کلاینت تعریف کرده اید اینها رو امتحان کردم یعنی یک کنترل html از نوع file روی صفحه یا فرم قرار دادم ولی شروط مورد نظر اجرا نشدند یا لحظه کد نویسی asp.net روشون گیر داده .یا نمی تونم از دکمه submit استفاده کنم چون تمام کدهای سمت سرور رو از دست میدم و اگر هم کدها رو ببرم تو یک روتین و صداشون بزنم احتمال داره مسیر پیچیده تر بشه و خوانایی برنامه کاهش پیدا می کنه. به هر حال سپاسگذارم و فرمایشات شما رو مو به مو و با دقت انجام میدم امیدوارم مشکل حل بشه
درود و عرض ادب
جناب محمد
کدهایی رو در stackoverflow پیدا کردم که همون حرف شما بود با این تفاوت که هم سمت سرور داشت هم کلاینت و دقیقا چیزی شد که خواستم تفاوت این کدها با مال شما در این بود که کنترل Fileupload آن سمت سرور بود و یک دکمه سمت سرور و یک دکمه سمت کلاینت داشت دکمه سمت سرور مخفی میشد اما رویداد کلیک آن در دکمه سمت کلاینت اجرا میشد
function showBrowseDialog() {
var fileuploadctrl = document.getElementById('<%= AttachFile.ClientID %>');
fileuploadctrl.click();
}
function upload() {
var btn = document.getElementById('<%= btnUpload.ClientID %>');
btn.click();
}
رویداد showBrowseDialog در کلیک دکمه سمت کلاینت عمل می کند و رویداد Upload در تعریف fileupload گنجانده شده یعنی این شکلی
<asp:FileUpload ID="AttachFile" runat="server" style="display:none" EnableViewState="False" onchange="upload()" />
<input id="Button1" type="button" value="بارگذاری" onclick="showBrowseDialog()" />
دکمه سمت سرور هم با نام btnUpload که در رویداد Upload() دیده میشود پنهان مانده و عملیاتهای سمت سرور را انجام می دهد (مثل ذخیره سازی و...)
به هر حال از همکاری شما سپاسگذارم
تاریخ :
1399/11/10
- ساعت :
10:01:00 PM
- بازدید :
7389
- پاسخ :
5
|
تاریخ :
1403/12/23
- ساعت :
11:21:00 AM
- بازدید :
292
- پاسخ :
1
|
تاریخ :
1398/09/06
- ساعت :
09:06:00 PM
- بازدید :
3502
- پاسخ :
1
|
تاریخ :
1398/09/17
- ساعت :
08:57:00 AM
- بازدید :
2276
- پاسخ :
1
|
تاریخ :
1398/09/08
- ساعت :
08:52:00 PM
- بازدید :
4230
- پاسخ :
3
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
748
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1712
- پاسخ :
1
|
تاریخ :
1398/09/05
- ساعت :
11:44:00 PM
- بازدید :
3527
- پاسخ :
2
|
تاریخ :
1402/04/06
- ساعت :
10:28:00 PM
- بازدید :
1461
- پاسخ :
0
|
تاریخ :
1398/08/21
- ساعت :
01:56:00 AM
- بازدید :
3692
- پاسخ :
1
|
تاریخ :
1399/11/10
- ساعت :
10:01:00 PM
- بازدید :
7389
- پاسخ :
5
|
تاریخ :
1400/04/26
- ساعت :
03:28:00 PM
- بازدید :
5223
- پاسخ :
1
|
تاریخ :
1403/12/01
- ساعت :
01:07:00 PM
- بازدید :
257
- پاسخ :
0
|
تاریخ :
1403/12/26
- ساعت :
03:13:00 PM
- بازدید :
152
- پاسخ :
1
|
تاریخ :
1404/02/04
- ساعت :
04:31:00 PM
- بازدید :
86
- پاسخ :
1
|
تاریخ :
1404/01/28
- ساعت :
09:29:00 PM
- بازدید :
94
- پاسخ :
1
|
تاریخ :
1404/01/29
- ساعت :
10:55:00 AM
- بازدید :
80
- پاسخ :
1
|
تاریخ :
1404/01/28
- ساعت :
10:46:00 AM
- بازدید :
93
- پاسخ :
1
|
تاریخ :
1404/01/28
- ساعت :
10:27:00 AM
- بازدید :
82
- پاسخ :
1
|
تاریخ :
1404/01/26
- ساعت :
05:27:00 PM
- بازدید :
179
- پاسخ :
1
|