从子页面 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 - 页面不断加载
如何在asp.net c# web应用程序中使用asp.net vb页面