C# 带内联C的ASP控件

C# 带内联C的ASP控件,c#,asp.net,textbox,C#,Asp.net,Textbox,我正在使用内联C编写一个动态下拉列表。取决于用户是否登录。我想能够写在一些asp文本框的见下文。有没有办法做到这一点,或者有更好的方法来完成这项任务 谢谢 <% if (checkLogin() == true) { Response.Write("<ul id=\"userDropdown\">"); Response.Write("<li class=\"userDropdown_right\"><a hre

我正在使用内联C编写一个动态下拉列表。取决于用户是否登录。我想能够写在一些asp文本框的见下文。有没有办法做到这一点,或者有更好的方法来完成这项任务

谢谢

<%
    if (checkLogin() == true)
    {
        Response.Write("<ul id=\"userDropdown\">");
        Response.Write("<li class=\"userDropdown_right\"><a href=\"#\" class=\"drop\">Test User</a>");
        Response.Write("<div class=\"dropdown align_right\" style=\"width:175px;\">");
        Response.Write("<div class=\"col_2\">");
        Response.Write("<h2>Test User</h2>");
        Response.Write("<h3>Administrator</h3>");
        Response.Write("<a href=\"#\">Settings </a>");
        Response.Write("<a href=\"#\">Logout </a>");
        Response.Write("</div></div></li></ul>");
    }
    else
    {
        Response.Write("<ul id=\"userDropdown\">"); 
        Response.Write("<li class=\"userDropdown_right\"><a href=\"#\" class=\"drop\">Login</a>");
        Response.Write("<div class=\"dropdown align_right\" style=\"width:175px;\">");
        Response.Write("<div class=\"col_2\">");

        **<asp:TextBox ID="test" runat="server" />**


        Response.Write("</div></div></li></ul>");
    }
%>

你试过这个吗?Response.Write的结果将放在开始标记的上方。 所以这不是个好主意


您可以使用模板控件,LoginStatus控件似乎非常适合该作业

您可以使用如下条件:

<%
if (checkLogin()==true){
%> Logged In content here <%
} else { 
%>
Not Logged In content here, including server controls.
<% 
} 
%> 

模板控件也可以工作

@Tetsujin没有解决问题的答案,但是

为什么不创建自己的用户控件customDropDown.ascx

通过这样做,您将能够:

在别处重复使用 封装行为,这样您只需要对一个位置进行更改 不使用字符串,并支持intellisense 编写支持visual studio预览的HTML标记
您可以使用占位符控件将输出定向到页面上的特定位置,而不是Response.Write。另外,不,以这种方式将服务器端控件写入页面将不起作用,至少它不应该起作用,如果它起作用,您就不应该信任它。对于更好的方法,我将遵从已经给出的其他建议…创建一个自定义控件,并在用户登录时使用LoginView控件显示它。@Henk我使用的是WebForms我同意,这个html应该在一个用户控件中,其关联的业务逻辑在控件代码后面。我不能看到我自己只在这个实例中使用它,否则创建一个用户控件将是一个很好的解决方案。