从子页面 asp.net(vb) 更新 master.page 的徽标图像

Posted

技术标签:

【中文标题】从子页面 asp.net(vb) 更新 master.page 的徽标图像【英文标题】:Update Logo image of master.page from child page asp.net(vb) 【发布时间】:2022-01-04 04:22:45 【问题描述】:

我正在使用母版页创建子页。我在母版页的标题部分有徽标、公司名称。我需要在登录页面后显示在下一页(主页面的子页面)。下一页将显示登录用户的徽标和公司名称。我将徽标路径和公司名称从子页面传递给主页面。标签运行良好,但无法显示徽标。你能告诉我如何解决这个问题吗?

这是我的 master.aspx

<asp:Label ID="lblcmpname" runat="server" Text=""></asp:Label>
<asp:Image ID="imglogo" runat="server"  />

和master.vb

Public Sub SetImageUrl(ByVal url As String)
        imglogo.ImageUrl = url

    End Sub

child.aspx

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/master.Master" CodeBehind="child.aspx.vb" Inherits="project.child" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
</asp:Content>

child.vb

Dim companyname As String = DirectCast(Session("companyname "), String)
Dim logopath As String = DirectCast(Session("~logos/Logo.jpg"), String)

Dim lblcmpname As Label = TryCast(Me.Master.FindControl("lblcmpname"), Label)
lblcmpname.Text = cmpname

Dim myImage As Image = CType(Master.FindControl("imglogo"), Image)
 If Not myImage Is Nothing Then
    myImage.ImageUrl = logopath
 End If

这里,标志的显示。

logo display

【问题讨论】:

老实说,这有点超出我的范围,所以我自己的理解可能有点,但这种机制不会完全违背母版页的意图吗? @Hursey,我认为这样做可以做得很好。我确实搜索了很多并且几乎相同的结果。但仍然无法使用我的页面。 :( 【参考方案1】:

为什么不只使用母版页的页面加载事件,并让它检查会话。

当您导航到新的子页面时,母版页加载事件总是会触发。因此,在您登录后,如果没问题,然后为正确的徽标设置会话。

现在,在主页面加载事件中,您可以检查是否没有会话,并使用您的登录徽标(或没有徽标),

所以,你可以把它放在 site.master 页面加载事件中:

    If Session("companyname") Is Nothing Then
        lblcmpname.Text = "Not yet logged on"
    Else
        lblcmpname.Text = Session("companyname")
    End If

    If Session("MyLogo") Is Nothing Then
        imglogo.ImageUrl = "~/Content/MyDefault.ppg"
    Else
        imglogo.ImageUrl = Session("MyLogo")
    End If

所以,现在登录后,你可以去:

Session("companyname") = "The correct company name goes here"
Session("MyLogo") = "path to correct logo goes here

' now navigate to Default.aspx, or whatever page with a master page.

所以,我假设没有 Session() 作为公司名称,没有 Session("MyLogo"),那么 master 的页面加载代码可以处理这个问题。

因此,当您登录时,将正确的公司名称设置为 session("compname"),并将正确的路径设置为 session("MyLogo")。

如果没有设置会话(当他们尚未登录时就是这种情况),则在主页面加载中测试没有会话值可以推入默认公司名称(或“”)或其他任何内容。

因此,请记住,当您导航到任何附加了母版页的页面时,都会触发母版页加载事件。 T

【讨论】:

,谢谢您的回答。当我将“~logos/Logo.jpg”)更改为“logos/Logo.jpg”时,出现了徽标图片。我不知道它是否有效。但是我用了你回答的方式,非常感谢。它确实奏效了。 不要使用 Session("~/logos/Glog.jpg")。使用 Session("Mylogo") = "~/logos/Glog.jpg" 或其他。您偶然尝试将路径名称用于会话命名值 - 使用会话名称,如 session("MyLogoPath") 或 sesson("MyLogo") = "my path"。或一些类似的,并将一个值推入会话 - 这与将一个值放入变量中没有什么不同。无论如何,看起来您可以使用上面的“想法”,并在登录后立即将 session("compname") 和 session("MyLogo") 设置为您想要的值。 在登录页面中,我使用了Session("logopath") = ...jpg,在master中,`imglogo.ImageUrl = Session("logopath")`。太赫兹了。 优秀 - 可以正常工作。

以上是关于从子页面 asp.net(vb) 更新 master.page 的徽标图像的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET/VB.NET/SQL Server 2012 - 页面不断加载

在 SQL/VB/Asp.Net 中更新日期

如何在asp.net c# web应用程序中使用asp.net vb页面

使用两个表 asp.net vb 更新查询

jQuery hide 不隐藏 vb.net/asp.net webform 中的任何内容

在Visual Basic.NET(VB.NET)中开发的ASP.NET Core应用程序,可以吗? VS