سؤال

أنا جديد جدًا على ASP.net MVC، لذا يرجى أن تكون وصفيًا قدر الإمكان في إجابتك :)

اسمحوا لي أن أبسط ما أحاول القيام به.تخيل أن لدي نموذجًا تريد إدخال بعض المعلومات حول السيارة فيه.قد تكون الحقول:الصنع، النموذج، السنة، الصورة 1، الصورة 2.

يوجد في الجزء السفلي من النموذج زر "حفظ".ستقوم طريقة وحدة التحكم المرتبطة بحفظ Image1 وImage2 على القرص، والحصول على أسماء الملفات الخاصة بهما وربطهما بطراز السيارة، والذي سيتم حفظه بعد ذلك في قاعدة البيانات.

أيه أفكار؟

شكرا يا شباب!

يحرر

winob0t حصلت لي على معظم الطريق هناك.المسألة الوحيدة المعلقة هي ما يلي:Image1 وImage2 ليسا حقلين مطلوبين، لذا يمكنني الآن حفظ 0.1 أو 2 صورة؛ولكن إذا قام المستخدم بتحميل صورة واحدة فقط، فليس لدي أي طريقة لمعرفة ما إذا كانت جاءت من imageUpload1 أو imageUpload2.

مرة أخرى، هو موضع تقدير أي مساعدة!

هل كانت مفيدة؟

المحلول

في وحدة التحكم الخاصة بك، يمكنك الوصول إلى الملفات التي تم تحميلها على النحو التالي:

    if(Request.Files.Count > 0 && Request.Files[0].ContentLength > 0) {
        HttpPostedFileBase postFile = Request.Files.Get(0);
        string filename = GenerateUniqueFileName(postFile.FileName);
        postFile.SaveAs(server.MapPath(FileDirectoryPath + filename));
    }

protected virtual string GenerateUniqueFileName(string filename) {

    // get the extension
    string ext = Path.GetExtension(filename);
    string newFileName = "";

    // generate filename, until it's a unique filename
    bool unique = false;

    do {
        Random r = new Random();
        newFileName = Path.GetFileNameWithoutExtension(filename) + "_" + r.Next().ToString() + ext;
        unique = !File.Exists(FileDirectoryPath + newFileName);
    } while(!unique);
    return newFileName;
}

ستصل الحقول النصية إلى إجراء وحدة التحكم الخاصة بك كالمعتاد، على سبيل المثال.نموذج طلب[...].لاحظ أنك ستحتاج أيضًا إلى تعيين enctype في النموذج على "بيانات متعددة الأجزاء/النموذج".يبدو أنك تفهم ما يكفي عن ASP.NET MVC للقيام بالباقي.لاحظ أيضًا أنه يمكنك إعلان علامة النموذج الخاصة بك في عرض aspx كما يلي، على الرغم من أنه يمكنك استخدام الطريقة التقليدية إذا أردت.

<% using(Html.BeginForm<FooController>(c => c.Submit(), FormMethod.Post, new { enctype = "multipart/form-data", @id = formId, @class = "submitItem" })) { %> 

<% } %>

نصائح أخرى

هذا هو الحل الخاص بي، الإجابة أعلاه لم تكن مناسبة لموقفي.إنه لا يهتم بتفاصيل النموذج وسيسمح بتحميلات متعددة.

    for (int i = (Request.Files.Count - 1); i >= 0; i--)
    {
          if (Request.Files != null && Request.Files[i].ContentLength > 0)
          {
               string path = this.Server.MapPath("~/Content/images/");
               string filename = Path.GetFileName(Request.Files[i].FileName);
               string fullpath = Path.Combine(path, filename);
               Request.Files[i].SaveAs(fullpath);
           }
     }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top