尝试在HTML

时间:2017-11-11 22:00:06

标签: c# asp.net webforms

我打赌以前曾问过这个问题,但我找不到合适的搜索关键字。

我试图在HTML的中间调用我的变量(currentUser.FirstName),但如果我尝试它将无法识别变量。如果我不在代码中放置HTML标记,它确实有用。

这是我的代码:

<% var currentUser = ProjectGalaxy.Website.GetCurrentUser(); %>
<% if (currentUser != null)
{ %>
    <ul class="nav navbar-nav navbar-right">
        <li><a runat="server" href="~/pages/Dashboard.aspx">Welcome <%= 
    currentUser.FirstName %></a></li>
</ul>
<% } %>

谢谢你, 托马斯

1 个答案:

答案 0 :(得分:1)

您在第一个服务器块中创建的变量&lt;%...%&gt;可能不再在范围内,因此当您退出第一个服务器块并正在编写html时,您将丢失上下文。

有几个选项取决于您是否仅限于在显示页面中解决此问题,或者是否能够同时编辑显示和代码。

选项1.删除变量并直接从服务器方法引用基础值。

有一个重复的调用,但它会删除任何作用域问题,并在您无法编辑后面的代码时保持本地化。

<% if (ProjectGalaxy.Website.GetCurrentUser() != null) {%>
    <ul class="nav navbar-nav navbar-right">
        <li><a runat="server" href="~/pages/Dashboard.aspx">Welcome <%:ProjectGalaxy.Website.GetCurrentUser().FirstName%></a></li>
    </ul>
<%}%>
  1. 在后面的代码中创建一个属性,并将方法值赋给该属性。 (文件更改后需要显示和代码)
  2. //后面的aspx.cs代码

    protected bool CurrentUser
    {
        get { return ProjectGalaxy.Website.GetCurrentUser(); }
    }
    

    // aspx显示页面

    <% if (CurrentUser != null) {%>
        <ul class="nav navbar-nav navbar-right">
            <li><a runat="server" href="~/pages/Dashboard.aspx">Welcome <%:CurrentUser.FirstName%></a></li>
        </ul>
    <%}%>
    
    1. 将控制权移至后面的代码,并使用代码创建一个asp:panel服务器控件,并在页面生命周期内切换面板的可见性。
    2. //后面的aspx.cs代码

      pnlWelcomeMessage.Visible = true; // during page load if condition is true
      

      // aspx显示页面

      <asp:Panel ID="pnlWelcomeMessage" runat="server" CssClass="nav navbar-nav navbar-right" Visible="false">
          <ul class="nav navbar-nav navbar-right">
              <li><a runat="server" href="~/pages/Dashboard.aspx">Welcome <%:ProjectGalaxy.Website.GetCurrentUser().FirstName%></a></li>
          </ul>
      </asp:Panel>
      

      希望它有所帮助。