C#ASP.NETで画像をランダムにマッピングする

これを見てのかなりのビット。

私はそれに画像コントロールとaspxのWebページを持って、私は画像コントロールで表示するためにランダムに私のWebディレクトリから画像をロードしたい。私が持っているコードとコードは以下の通りです。

画像ファイルを無作為にリクエストしてWebページに表示するという単純な作業ですが、私が受け取っているのはローカルファイルパス(Image Controlには使用されていないようです)とウェブページ上の画像ではありません。

AppSettings.imageUrlは "〜/ Images"を返します。

任意の提案をいただければ幸いです。

        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ですが、あなたの2行で次の文字列が返されるため意味がありません:(1) "〜/ imagesc:\\ thepathofthefile.jpg"と(2) Request.MapPathは〜/ imagesC:\のローカルパスをファイルのパスとして取得するはずですか?
追加された 著者 Fabio Milheiro,
ニコラを冷やす。他人が自分の答えを改善するのを助けるupvoteさえないのは残念です:)
追加された 著者 Fabio Milheiro,
こんにちはファビオ。あなたは正しい、私は謝罪する、私は医者にチェックしなかった。回答がファイル名の抽出を含むように変更されました。
追加された 著者 Nikola Radosavljević,
まだStackOverflowで私のマナーを学んで:)再び申し訳ありません:)
追加された 著者 Nikola Radosavljević,
ありがとうNikola、今日数時間働いて、私はそれを見ることができませんでした!あなたが何かをして、各ループのためにパスからファイル名のリストをつかんで、ちょうどこれを私のイメージディレクトリ "〜\ 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,
それは素晴らしい解決策です@ダンカンスマートです。
追加された 著者 Fabio Milheiro,
とった!..............
追加された 著者 Fabio Milheiro,
ですから、非常に賢明ではありません:-) ResolveClientUrl についての私の更新を見てください。
追加された 著者 Duncan Smart,
私はupvoteしていただければ幸いです:-)
追加された 著者 Duncan Smart,

あなたはファイル名を取得しています。 Directory.GetFilesは、Web以外のアプリケーションでも使用できるため、ファイルをWebサイトのルートからの相対パスとして扱うことは意味がありません。

あなたができることは、このようにサイトのルートのローカルパスを取得することです:

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

選択したファイルからその部分文字列を削除します。

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

それだけで十分です。

0
追加された