将aspx文件包含在其他aspx文件中

3
<% if (Session["desig"].ToString() == "Developer"){%>
    <td>
        <select name='zone' id="zone" onchange="showLoc(this.value,'mlodg_loc')"> 
            <option value="Select Zone">Select Zone</option>
            <option value="East">East</option>
            <option value="West">West</option>
            <option value="North">North</option>
            <option value="South1">South1</option>
            <option value="South2">South2</option>
            <option value="South3">South3</option>
        </select>
    </td>  
<%}
  else 
  {%>
        <td>
          <select name='zone' id="Select1" onchange="showLoc(this.value,'mlodg_loc')"> 
              <option value="Select Zone">Select Zone</option>
              <option value="<%#Session["zone"]%>"><%# Session["zone"].ToString() %></option>
          </select>
        </td>
<%}%>

如果我直接编写上面的代码,它可以正常工作。我尝试将此代码编写到其他文件中,并在主文件中使用Response.WriteFile("zone.aspx")

如何包含它?有没有更好的方法来编写上述语句?

谢谢


可能是 http://stackoverflow.com/questions/5642624/how-to-include-aspx-page-in-another-aspx-page-in-asp-net 的重复问题。 - Matt
2
.ascx 不是一个可行的选项吗? - Priyank Thakkar
3个回答

5

UserControls是ASP.NET中用于此目的的控件,为您拥有的这段代码创建一个.ascx文件,并将其作为控件在任何地方使用。


如果我使用UserControl,我认为我必须使用响应将HTML写出来,对吗? - Aadam
它会自动输出你的HTML,你不需要做任何事情,只需要定义: <%@ Register Src="YourFile.ascx" TagPrefix="YOURTAGPREFIX" TagName="YOURTAGNAME" %> 并使用:<YOURTAGPREFIX:YOURTAGNAME ID="IDFORTHISCONTROL" runat="server" /> 这将帮助你入门:http://msdn.microsoft.com/en-us/library/aa728784(v=vs.71).aspx - Manoj Purohit

3

Response.WriteFile方法只是将文件内容写入Http响应流中,而不会解析它。

虽然在asp.net中可以使用服务器端包含(Server Side includes) (<!--#include file="xxx.ext" -->),但我认为这种方式有一种asp-classic代码气味。

获取重用.aspx组件的更好方式是使用用户控件(.ascx)

类似问题在这里

更新

Response.WriteFile方法适用于纯HTML、.css或.js文件,但不适用于包含C#代码或引用.Net对象的代码(您的代码中使用了Session),例如。

Response.WriteFile("HtmlSnippet.html")

其中HtmlSnippet.html是指

<p>In breaking news, scientists have discovered a planet in 
     <a href='http://en.wikipedia.org/wiki/Alpha_Centauri_Bb'>Alpha Centauri</a>
</p>

使用服务器端包含(Server Side Include),例如<!--#include file="file.inc" -->,可以让您在file.inc中放置以下内容:
<% if (Session["desig"].ToString() == "Developer"){ %>
   You are a Developer!!
<% } %>

然而,推荐的做法是使用用户控件(.ascx),它允许您完成与服务器端包含相同的操作,但以更可重用、面向对象和可测试的方式。您的可重用控件将成为一流对象,具有属性、方法和能够引发事件。您需要进行一些研究。


我不明白如何使用 .ascx 来生成 HTML。您能提供一小段代码吗?谢谢。 - Aadam
谢谢,服务器端包含对于那些想要一个基本跳转页面并在加载后执行一些JavaScript进行测试的人来说是完美的。 - he_the_great

0

Response.WriteFile不会在服务器端处理代码,它只是将HTML内容传输到浏览器。如果您的代码包含必须由服务器处理的代码块,则可以使用此便捷功能:

<div ID="menuContent" runat="server">
    <!-- #Include virtual="/menu.aspx" -->
</div>   

在我的menu.aspx文件中,我有原始的HTML和一些C#代码块,ASP会在将内容插入页面后解析它们。很棒吧?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接