نمایش نتایج 1 تا 8 از 8

نام تاپیک: مشکل در بارگزاری فایل در فرم

  1. #1

    Question مشکل در بارگزاری فایل در فرم

    درود
    من تو این فرم با input-file دوتا مشکل دارم/
    1-وقتی فایلی رو در فرم آپلود مبکنم و روی سابمیت کلیک میکنم نام فایل مورد نظر بدرستی در جدول ذخیره میشه اما خود فایل در دایکتوری تعیین شده بارگزاری نمیشه/برک پوینت که گذاشتم فهمیدم هنگام پست شدن فرم پارامتر " HttpPostedFileBase file" در اکشن نال هستش!هرکاری هم کردم درست نشد.با توجه به کدهایی که زدم لطفا بگید ایراد کار کجاست؟(اینم بگم با اینکه تو ویو صراحتا برای input-file فرم مقدار name="file" رو تعریف کردم اما وقتی تو مرورگر inspect element میگیرم نامش همون FileUpload نوشته میشه.)
    2-برنامه رو طوری نوشتم که تنها وقتی کاربر گزینه "درخواست درج آگهی" در DropDownList فرم رو انتخاب کرد input-file فرم فعال باشه و درغیر اینصورت غیرفعال بمونه.خب تااینجا درست کار میکنه مشکلم با ولیدیشن مربوط به این ورودیه که حتی وقتی هم غیرفعاله بازم اجازه پست شدن به رم رو نمیده!چیکار باید بکنم تا وقتی input-file غیر فعاله ولیدیشن اونم دیگه کار نکنه؟
    سپاس
    کد ویوی فرم
    کد HTML:
    <div class="col-md-12 order_tell">
                @using (Html.BeginForm("TellUs", "Home",
                FormMethod.Post ,new { @class = "form-horizontal box_new_cmnt", enctype = "multipart/form-data" }))
                {
                    @Html.AntiForgeryToken()
                    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
                    <div class="row r_cmnt">
                        <div class="col-md-12 lbl_frm">
                            @Html.LabelFor(m => m.Subject)
                        </div>
                    </div>
                    <div class="row r_cmnt">
                        <div class="col-md-6 box_validation">
                            @Html.ValidationMessageFor(model => model.Subject, "", new { @class = "text-danger" })
                        </div>
                        <div class="col-md-6 inpt_frm">
                            @Html.DropDownListFor(model => model.Subject,
                           new List<SelectListItem>
                           {
                               new SelectListItem() {Text="سفارش پروژه",Value="prj"},
                               new SelectListItem() {Text="درخواست درج آگهی",Value="agh"},
                               new SelectListItem() {Text="دیگر ...",Value="otr"}
                           }
                           , "انتخاب", new { @class = "form-control", id = "lst_tell", onchange = "visibleFile()" })
                        </div>
                    </div>
                    <div class="row r_cmnt">
                        <div class="col-md-12 lbl_frm">
                            @Html.LabelFor(m => m.Email)
                        </div>
                    </div>
                    <div class="row r_cmnt">
                        <div class="col col-md-6 box_validation">
                            @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger"})
                        </div>
                        <div class="col-md-6 inpt_frm">
                            @Html.TextBoxFor(model => model.Email, "", new { id = "eml" })
                        </div>
                    </div>
                    <div id="div_file">
                        <div class="row r_cmnt">
                            <div class="col-md-12 lbl_frm">
                                @Html.LabelFor(m => m.FileUploud)
                            </div>
                        </div>
                        <div class="row r_cmnt">
                            <div class="col col-md-6 box_validation">
                                @Html.ValidationMessageFor(model => model.FileUploud, "", new { @class = "text-danger" })
                            </div>
                            <div class="col-md-6 inpt_frm">
                                @Html.TextBoxFor(model => model.FileUploud, null, new { type = "file",@name="file", id = "up_tell", disabled = "disabled" })
                            </div>
                        </div>
                    </div>
                    <div class="row r_cmnt">
                        <div class="col-md-12 lbl_frm">
                            @Html.LabelFor(m => m.Body)
                        </div>
                    </div>
                    <div class="row r_cmnt">
                        <div class="col col-md-4 box_validation">
                            @Html.ValidationMessageFor(model => model.Body, "", new { @class = "text-danger" })
                        </div>
                        <div class="col-md-8 inpt_frm">
                            @Html.TextAreaFor(model => model.Body, new { rows = "10" })
                        </div>
                    </div>
    
                    <div class="row r_cmnt">
                        <div class="col-md-12 btn_frm">
                            <button type="submit">درج پیام</button>
                        </div>
                    </div>
                }
            </div>
    //javascript
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/jquery.validate.min.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#lst_tell").change(function () {
                if ($(this).val() == "agh") {
                    $("#up_tell").removeAttr('disabled');
                    $("#up_tell").removeAttr('data-valmsg-for');
                } else {
                    $("#up_tell").attr('disabled', "disabled");
                    $("#val_up").attr('data-valmsg-for', "FileUploud");
                }
            });
        });
    </script>
    کد اکشن

    [HttpGet]
    public ActionResult TellUs()
    {
    return View();
    }
    [HttpPost]
    public ActionResult TellUs(HttpPostedFileBase file,
    [Bind(Include = "ID,Subject,Email,Body,FileUploud,Date,Time,State" )] Message message)
    {
    if (ModelState.IsValid)
    {
    if (file != null && file.ContentLength > 0)
    {
    message.FileUploud = file.FileName;
    string strPath = "~/Content/Images/ads"+ file.FileName;
    string strFinal = Server.MapPath(strPath);
    file.SaveAs(strFinal);
    db.Messages.Add(message);
    db.SaveChanges();
    }
    else
    {
    db.Messages.Add(message);
    db.SaveChanges();
    }
    }
    return View();
    }

  2. #2

    نقل قول: مشکل در بارگزاری فایل در فرم

    کدتون کمی طولانی هست ، برای همینه که دیر جواب میگیرید .

    برای سوال اولتون ، دلایل مختلفی میتونه وجود داشته باشه که یکیش رو خودتون اشاره کردید که Name در FileUpload میشه ; برای این مورد بجای TextboxFor Helper یک input از نوع فایل بزارید و name اون رو file بزارید و تست کنید .
    طبق این آموزش هم عمل کنید تا مطمئن بشید مراحل رو بدرستی پیش رفتید : http://haacked.com/archive/2010/07/1...spnetmvc.aspx/

    در مورد سوال دوم هم ، سمت Controller باید این مورد رو مدیریت کنید .

  3. #3

    نقل قول: مشکل در بارگزاری فایل در فرم

    نقل قول نوشته شده توسط Moien Tajik مشاهده تاپیک
    کدتون کمی طولانی هست ، برای همینه که دیر جواب میگیرید .

    برای سوال اولتون ، دلایل مختلفی میتونه وجود داشته باشه که یکیش رو خودتون اشاره کردید که Name در FileUpload میشه ; برای این مورد بجای TextboxFor Helper یک input از نوع فایل بزارید و name اون رو file بزارید و تست کنید .
    طبق این آموزش هم عمل کنید تا مطمئن بشید مراحل رو بدرستی پیش رفتید : http://haacked.com/archive/2010/07/1...spnetmvc.aspx/

    در مورد سوال دوم هم ، سمت Controller باید این مورد رو مدیریت کنید .
    سپاس
    مشکل اول برطرف شد همونطور که شما گفتید از input استفاده کردم.
    اما برای پرسش دوم: یعنی نمیشه سمت کلاینت با متد دستی جی کوئری این کار رو کرد .من از صبح دارم تلاش میکنم تو صفحه یه متد جی کوئری بنویسم که وقتی کاربر سابمیت میکنه :دوتا شرط رو چک کنه که اگه آیتم agh تو دراپ داون انتخاب بود و input-file هم نال بود یه المنت اسپن که توش اخطار رو نوشتم از حالت هیدن دربیاد و فرم هم پست نشه/ولی هرچی ور میرم اصلا تابع اجرا نمیشه.
    تاکیدم روی جی کوئری واسه اینکه اگه سمت کلاینت بتونم اینکار رو کنم بهره وری بهتری داره. درسته؟
    یکی از فانکشن هایی که امتحان کردم اینه:

    <script type="text/javascript">
    //فانکشن ولیدیشن برای بارگزاری فایل
    $(document).ready(function(){
    $("#btn").submit(function () {

    if ($("lst_tell").val == "agh" && $("#up_tell").val == null) {
    $("#val_fle").removeAttr("hidden");
    return false;
    }
    });

    });
    //فانکشن فعال یا غبرفعال کردن اینپوت-فایل با توجه به آیتم انتخابی دراپ داون لیست
    $("#lst_tell").change(function () {
    if ($(this).val() == "agh") {
    $("#up_tell").removeAttr('disabled');
    $("#up_tell").removeAttr('data-valmsg-for');
    } else {
    $("#up_tell").attr('disabled', "disabled");
    $("#val_up").attr('data-valmsg-for', "FileUploud");
    }
    });
    </script>



  4. #4

    نقل قول: مشکل در بارگزاری فایل در فرم

    سمت کلاینت این رو بخواید مدیریت کنید خیلی راحت میشه Bypass کردش و بقولی " پیچوندش " چون کد سمت کاربر هستش .
    برای همین هست که شما برای Property های مدلتون Data Annotation میزارید تا هم سمت سرور و هم سمت کلاینت Validation انجام بشه .

    یه Package هستش به اسم Fool Proof که شما میتونید باهاش Conditional Validation رو انجام بدید ، یعنی بر اساس مقدار فیلد دیگه یک Validation در سمت سرور اعمال بشه .
    فکر میکنم بتونه چیزی که میخواید رو براتون فراهم کنه : https://foolproof.codeplex.com/

  5. #5

    نقل قول: مشکل در بارگزاری فایل در فرم

    سپاس واسه پشنهاد پکیج
    اما راستش من منشاء اجرا نشدن فانکشن مورد نظر رو پیدا کردم که اگه حل بشه گمون نکنم نیاز به بکارگیری پکیج داشته باشم/تو فانکشن وقتی شرط رو حذف میکنم دستورهای درونش بدرستی اجرا میشه(اسپن #val_fle نشون داده میشه و فرم هم پست نمیشه) اما همین که شرط رو برمیگردونم باز متد مورد نظر اجرا نمیشه!پس مشکل از نادیده گرفته شدن شروط هست /نمیدونم چرا شروط رو نادیده میگره.حتی من شروط رو بروش زیر از هم جدا کردم ولی بزم فایده نداشت .بیزحمت شما یه نگاه بندازید ببینید می تونید مشکل رو پیدا کنید.درضمن بجای ایونت سابمیت باتن اینبار از سابمیت خود فرم استفاده کردم

    $(document).ready(function(){
    $("#frm").submit(function () {

    if ($("#lst_tell").val == "agh") {
    if ($("#up_tell").val == null || $("#up_tell").val=="") {
    $("#val_fle").removeAttr("hidden");
    alert("error");
    return false;
    }
    }
    });

  6. #6

    نقل قول: مشکل در بارگزاری فایل در فرم

    وقتی کد js مینویسید همیشه از Console.log استفاده کنید تا ببینید مقدار متغییرتون چی هست .

    فکر میکنم مشکل شما از این شرط هستش :
    if ($("#lst_tell").val == "agh")


    برای گرفتن آیتم انتخاب شده در Dropdown از این کد استفاده کنید :

    var currentDropdownValue = $('#lst_tell').find(":selected").val();




    if (currentDropdownValue == "agh") {
    if ($("#up_tell").val == null || $("#up_tell").val == "") {
    $("#val_fle").removeAttr("hidden");
    alert("error");
    return false;
    }
    }


    https://stackoverflow.com/a/10659117

  7. #7

    نقل قول: مشکل در بارگزاری فایل در فرم

    نقل قول نوشته شده توسط Moien Tajik مشاهده تاپیک
    وقتی کد js مینویسید همیشه از Console.log استفاده کنید تا ببینید مقدار متغییرتون چی هست .

    فکر میکنم مشکل شما از این شرط هستش :
    if ($("#lst_tell").val == "agh")


    برای گرفتن آیتم انتخاب شده در Dropdown از این کد استفاده کنید :

    var currentDropdownValue = $('#lst_tell').find(":selected").val();




    if (currentDropdownValue == "agh") {
    if ($("#up_tell").val == null || $("#up_tell").val == "") {
    $("#val_fle").removeAttr("hidden");
    alert("error");
    return false;
    }
    }


    https://stackoverflow.com/a/10659117
    بازم درست نشد!! از روش شما برای بدست آوردن آیتم دراپ استفاده کردم با کنسول نتونستم مقدار آیتم انتخابی رو ببینم ولی گذاشتمش درون alert() .خنده دار اینجاست که توی آلرت دقیقا مقدار agh رو نشون میده ولی بازم شرط عمل نمیکنه.دیگه دیوونم کرده با این حال سپاس از راهنمایی هاتون

  8. #8

    نقل قول: مشکل در بارگزاری فایل در فرم

    سرانجام یه جوری درستش کردم !بجای if از switch استفاده کردم و جواب داد یکم زیاده روی ولی خدایی خیلی ذوق کردم چون 4-5 روزه سر این ایاد کوچیک بد مخم درگیر بود/البته با راهنمایی های شما
    حالا با این تفاسیر نظرتون راجع به کدهایی که واسه این منظور نوشتم چیه ؟خوب هست یا نه؟
    اسکریپت نهایی شاید کسایی مشکل من رو داشته باشند و ازش بخوان استفاده کنن

    <script type="text/javascript">
    //فانکشن ولیدیشن برای بارگزاری فایل
    $(document).ready(function(){
    $("#frm").submit(function () {
    var x = $('#lst_tell').find(":selected").val();
    var a = $('#up_tell').first().val();
    switch(x)
    {
    case 'agh':
    if (a== null || a=="") {
    $("#val_fle").removeAttr("hidden");
    return false;
    break;
    }
    }
    });
    });
    //فانکشن فعال یا غبرفعال کردن اینپوت-فایل با توجه به آیتم انتخابی دراپ داون لیست
    $("#lst_tell").change(function () {
    if ($(this).val() == "agh") {
    $("#up_tell").removeAttr('disabled');
    $("#up_tell").removeAttr('data-valmsg-for');
    } else {
    $("#up_tell").attr('disabled', "disabled");
    $("#val_up").attr('data-valmsg-for', "FileUploud");
    }
    });
    </script>



قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •