【问题标题】:Why photo is not displaying in ASP.NET web application为什么照片没有显示在 ASP.NET Web 应用程序中
【发布时间】:2021-11-24 05:51:06
【问题描述】:

我正在使用 C# 语言的 ASP.NET 表单制作一个 Web 应用程序。
我需要将图像作为输入并想要显示它...
这里的“staffStatus”是 GridView 的 ID。(我不想直接从那里绑定数据,因为应该只显示几列。)

SqlCommand cmd = new SqlCommand("SELECT * FROM [StaffInfo] WHERE Role='Staff' ", con);
                    SqlDataReader dr = cmd.ExecuteReader();
                    if ( dr.HasRows==true )
                    {
                        staffStatus.DataSource = dr;
                        staffStatus.DataBind();
                    }

这是staffStatus.aspx页面的内容(显示数据)

<asp:GridView ID="staffStatus" runat="server" AutoGenerateColumns="False" ShowHeader="false" CssClass="table">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    Id: <asp:Label runat="server" id="staffId" Text='<%# Eval("Id") %>' />
                    <br />
                    Name : <asp:Label ID="staffName" runat="server" Text='<%# Eval("staffName") %>' /> <asp:Label runat="server" id="staffSurname" Text='<%# Eval("staffSurname") %>' />
                    <br />
                    Email : <asp:Label ID="staffEmail" runat="server" Text='<%# Eval("staffEmail") %>' />
                    <br />
                    Gender: <asp:Label runat="server" id="staffGender" Text='<%# Eval("staffGender") %>' />
                    <br />
                    Phone No. : <asp:Label ID="staffPhoneNo" runat="server" Text='<%# Eval("staffPhoneNo") %>' />
                    <br />
                    Joining Date: <asp:Label runat="server" id="staffJoinDate" Text='<%# Eval("staffJoinDate") %>' />
                    <br />
                    Role : <asp:Label ID="Role" runat="server" Text='<%# Eval("Role") %>' />
                    <br />
                    Image : <image src='<%# Eval("staffImage") %>' />
                    <br />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

这就是我如何将表单数据保存到数据库中

string staffImageName = ddlRole.SelectedItem.Text.ToUpper() + "_" + staffImage.PostedFile.FileName;
string staffImagePath = "Images/Staff/" + staffImageName;
staffImage.PostedFile.SaveAs(Server.MapPath("~/Images/Staff/") + staffImageName);
SqlCommand cmd = new SqlCommand("INSERT INTO [staffInfo] VALUES ('" + txtName.Text + "','" + txtSurname.Text + "','" + txtEmail.Text + "','" + ddlGender.SelectedItem.Text + "','" + txtPhone.Text + "','" + DateTime.Today.ToShortDateString() + "','" + cryptPassword + "','" + ddlRole.SelectedItem.Text + "','" + staffImagePath + "')", con);
int chck = cmd.ExecuteNonQuery();

所以基本上它会将照片保存为 STAFF_pic1.jpgADMIN_pic2.jpg 在项目中可用的图像文件夹中。
对于数据库,它存储诸如 Images/Staff/STAFF_pic1.jpg

之类的数据

但是为什么它在应用程序上不显示图片!? 谁能说出这是怎么发生的以及为什么会发生!?

【问题讨论】:

  • staffImage 变量的值是多少?可以调试吗?浏览器控制台还可以帮助您查看 src 标签中的内容
  • @viveknuna 这解释了很多。现在我看到它正在“Admin”文件夹中搜索“Images”文件夹,因为这个 aspx 页面位于“Admin”中,而“Images”位于根文件夹中。那么你能告诉我如何解决这个问题..
  • 尝试使用 .此链接将为您提供帮助stackoverflow.com/a/275791/6527049

标签: c# asp.net image razor aspxgridview


【解决方案1】:

那么,您从哪个文件夹运行 GridView?

我的意思是你可能有一个名为“accounts/MyAccounts.aspx”的文件夹

所以,如果该网页是嵌套的,那么图片的路径就是这个

            <img src="../Content/ckdelete.png" />

但是,如果网页位于网站的根目录中,那么我们将使用这个:

             <img src="Content/ckdelete.png" />

因此,必须根据当前网页的运行位置更改图像的路径名。但是,假设我们将代码 + 网页移动/复制到了帐户文件夹?那么你可以这样做:

Image : <image src='<%# "../" + Eval("staffImage") %>' />
<br />

通常,我懒得获取路径名,所以我用 gridview 打开那个页面,然后从项目探索简单地将图像从给定文件夹拖放到网页上的空白区域,然后这会给我正确的路径名。我复制它,然后从页面中删除图像。

现在,图片的路径名当然必须是您可用的网络路径中的有效文件夹。如果出于安全原因您不希望图像存在有效的 URL? (或PDF),然后您可以将此类文件/图片放置在Web文件夹层次结构之外,并使用后面的代码来读取图片并将其“流式传输”到gridview。但是,此时,我们假设路径名称是网站中的有效文件夹,并且如果您输入该图片的 URL,则可以显示此类图片(尝试通过在浏览器中输入 URL 来测试- 图片有显示吗????)。

并按照上述方法进行测试,将图片文件从项目资源管理器中拖放到网页中,看看是否可以显示。

因此,图片来源必须是您当前网站文件夹的有效文件夹路径。如果不是,那么您可以使用后面的代码从磁盘驱动器中读取此类文件,但这是一个不同的问题和不同的故事和帖子!

【讨论】:

    猜你喜欢
    • 2014-03-17
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2021-07-02
    • 1970-01-01
    • 2017-06-05
    相关资源
    最近更新 更多