我尝试将站点页面的Url保存在站点配置中,来避免页面路径调整时要修改多处Url的麻烦。站点配置<appSettings>
<add key="Name" value="asp_app" />
<add key="MasterUrl_Frame" value="~/Frame.master" />
</appSettings>
页面属性中用ExpressionBuilder获取配置的Url
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" MasterPageFile="<%$ AppSettings:MasterUrl_Frame %>" %>报错如下:
: 生成 (web): “<%$ AppSettings:MasterUrl_Frame %>”不是有效的虚拟路径。而忽略这里,下面同样方式获取注册跳转链接却正常<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" MasterPageFile="~/Frame.master" %><asp:Content ContentPlaceHolderID="ContentPlaceHolder" runat="server">
    <div>
        <asp:Login ID="lgn1" CreateUserText="注册" CreateUserUrl="<%$ AppSettings: PageUrl_Register %>" runat="server">
        </asp:Login>
    </div>
</asp:Content>是否在<%@...%>段内不能访问web.config? 还是有其他原因?求解~~

解决方案 »

  1.   


    用配置文件去管理一下路径是个很好的方法,凡事出现三次以上要重复写的路径都应该考虑提出来管理写在config文件中有利于修改,不用重新编辑读取用ConfigurationManager.AppSettings["Key名字"];
      

  2.   

    头部那个 <%@ 
    本身就是<%标签内了
      

  3.   

    重点
    <%$ AppSettings:MasterUrl_Frame %>
    这种取配置的方法,放在
    <%@ Page ... MasterPageFile="<%$ AppSettings:MasterUrl_Frame %>"%>
    里面就行不通了
    : 生成 (web): “<%$ AppSettings:MasterUrl_Frame %>”不是有效的虚拟路径。
      

  4.   


    这个事件和Page_Load 事件一样,只是页面没有显示而以,你直接把下面事件复制到Page页面使用就可以了//页面初始化事件
    protected void Page_PreInit(object sender, EventArgs e)
    {
       ConfigurationManager.AppSettings["Key名字"]; 
    }
      

  5.   

    楼上正解这里随便引一个母板
    <%@ Page ... MasterPageFile="~/Fake.master"%>PreInit中修改Master
    protected override void OnPreInit(...)
    {
      base.OnPreInit(...);
      this.MasterPageFile = ConfigurationManager.AppSettings["RealMaster"];
    }