C # ASP.NET ішіндегі кескінді кездейсоқ түрде салыстыру

Осыған біраз қарау.

Менде Image басқару элементі бар aspx веб-беті бар және суреттерді басқару элементінде кездейсоқ ретпен веб-каталогымнан суреттерді жүктегім келеді. Төменде кодекс және қаншалықты аламын.

Сурет файлын кездейсоқ ретпен сұрату және оны веб-бетте көрсету үшін қарапайым тапсырма болып көрінеді, алайда, мен алдымен, жергілікті файлдар (бұл Image Control үшін пайдаланылмайтын сияқты) және веб-бетте ешқандай сурет жоқ.

AppSettings.imageUrl қайтарады: «~/Суреттер»

Кез келген ұсыныс бағаланады.

        protected void Page_Load(object sender, EventArgs e)
    {
        GetImage();
    }

    private void GetImage()
    {

        imgMain.ImageUrl = ResolveClientUrl(RandomImage());

    }
    private string RandomImage()
    {
        string mapPath = Request.MapPath(AppSettings.imageUrl);

        var rand = new Random();
        var files = Directory.GetFiles(mapPath);
        return files[rand.Next(files.Length)];
0
RandomImage() ішіндегі бағдарлама жолын mapPath
қосылды автор fardjad, көзі

3 жауаптар

Сіздің RandomImage() әдісіңіз ағымдағы бетке қатысты файл жолын қайтармауы мүмкін. Немесе қайтарыңыз

string fileName = Path.GetFileName(file[rand.Next(files.Length)]);
return AppSettings.imageUrl + fileName;

содан кейін оны шешіңіз немесе бірден шешіңіз

string fileName = Path.GetFileName(file[rand.Next(files.Length)]);
return Request.MapPath(AppSettings.imageUrl + fileName);
2
қосылды
Кешіріңіз, @Nikola, бірақ бұл сіздің екі жолыңыз келесі жолдарды қайтаратындығын білдірмейді: (1) «~/imagesc: \\ thepathofthefile.jpg» және (2) Мен бұл қайтып келетінін білмеймін. Request.MapPath сізден ~/imagesC: \ файлдың жолын жергілікті жолды алуыңыз керек пе?
қосылды автор Fabio Milheiro, көзі
Салқын Никола. Басқаларға өздерінің жауаптарын жақсартуға көмектесу үшін тіпті біреудің ұйқысы жоқ
қосылды автор Fabio Milheiro, көзі
Hi Fabio. Сіз дұрыс, кешірім сұраймын, мен құжаттарды тексермедім. Жауап қазір файл атауын шығаруды қосу үшін өзгерді.
қосылды автор Nikola Radosavljević, көзі
StackOverflow-та менің мінез-құлықты үйрену :)
қосылды автор Nikola Radosavljević, көзі
Рахмет Никола, бүгін бірнеше сағат бойы жұмыс істеді, мен оны көре алмадым! Әрбір цикл үшін жолдан файл атауларының тізімін ғана алып, содан кейін бұл суретті «~ \ Images \» кескін каталогына қосқаныңыз жөн.
қосылды автор Joey Bob, көзі
^ XD-нің жақсы идеясы
қосылды автор Joey Bob, көзі

Алынған беттегі Көз көрініс көзін жасаңыз және мәнді мәнге орнатылғанын тексеріңіз.

Кейінгі тергеу барысында, ResolveClientUrl абсолюттік файлдық жүйе жолы емес, салыстырмалы URL мекенжайын алады. Сондықтан RandomImage келесідей нәрсені қайтаруы керек:

return AppSettings.imageUrl + "/" + Path.GetFileName(files[rand.Next(files.Length)]);
1
қосылды
Сурет мәні src жергілікті жолға орнатылады (C: \ whatever \ path.jpg сияқты).
қосылды автор Fabio Milheiro, көзі
Бұл өте жақсы шешім @Duncan Smart.
қосылды автор Fabio Milheiro, көзі
Түсіндім!..............
қосылды автор Fabio Milheiro, көзі
Мәселен - өте мағыналы емес :-) ResolveClientUrl туралы менің жаңартылымды қараңыз.
қосылды автор Duncan Smart, көзі
Мен жаңаруды бағалаймын :-)
қосылды автор Duncan Smart, көзі

Сіз файл атауларын аласыз. Directory.GetFiles-ақ веб-қосымшада қолданылуы мүмкін, сондықтан файлдарды веб-торабыңыздың түбіріне қатысты емдеу мағынасы болмайды.

Сіз не істей аласыз: сіздің сайтыңыздың түбірі үшін мына жергілікті жолды алу:

string root = Request.MapPath("~/");

содан кейін таңдалған файлдан осы ішкі жолды алып тастаңыз:

files[rand.Next(files.Length)].Replace(root, string.Empty);

Бұл сізге қажет.

0
қосылды