新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 计算机科学论坛计算机技术与应用『 Dot NET,C#,ASP,VB 』 → [合集] 用好runat="server",分离表示层和逻辑层 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 2542 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [合集] 用好runat="server",分离表示层和逻辑层 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     admin 帅哥哟,离线,有人找我吗?
      
      
      
      威望:9
      头衔:W3China站长
      等级:计算机硕士学位(管理员)
      文章:5255
      积分:18406
      门派:W3CHINA.ORG
      注册:2003/10/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给admin发送一个短消息 把admin加入好友 查看admin的个人资料 搜索admin在『 Dot NET,C#,ASP,VB 』的所有贴子 点击这里发送电邮给admin  访问admin的主页 引用回复这个贴子 回复这个贴子 查看admin的博客楼主
    发贴心情 [合集] 用好runat="server",分离表示层和逻辑层


    发信人: Nineteen (-_-#!), 信区: DotNET
    标  题: [合集] 用好runat="server",分离表示层和逻辑层
    发信站: BBS 水木清华站 (Sat Dec 20 17:53:15 2003), 站内

    ☆─────────────────────────────────────☆
       wesley (pine~心中的森林) 于  (Sat Apr 27 13:24:09 2002)  提到:

    最好不要用asp的方法来套asp.net,应该尽可能避免在aspx页面里出现<% %>块,
    因为
    迄今为止我发现都可以在code behind中解决,有的时候你会在服务器端找不到个
    aspx
    页面中定义好的server side controle,那就应该看看code behind里面是否在
    webform类里声明了一个protected的同样名字的属性,如果没有就手动加上,这可能是一
    个无伤大雅的小bug。

    更多的时候,可以很灵活的利用runat="server"来定义更多的控件,比如将body设成
    <body id="myBody" runat="server">
    然后在code behind里加上myBody的属性,就可以在Page_Load里面自定义body的一些
    属性和样式了,这比在aspx页面中用<%= %>来定制漂亮得多,更重要得是,当你得程序
    自定义度得要求很高得时候,在代码中很容完成的运行时determine的数据赋值,在
    页面中用老的<% %>文法是很难实现的,即使能够实现也很ugly。

    想想JSP页面中的jsp tag library,一个好的JSP页面应该也不出现任何<% %>文法,
    而应该把所有的服务器端的脚本写在tag library里面。
    ms给我们提供了webform。比起taglib更加方便和容易,我们可以好好发挥一下webform
    在分离表示层和逻辑层上提供的天然机制,用好runat="server"



    ☆─────────────────────────────────────☆
       phanx (向右走) 于  (Sat Dec 20 01:43:06 2003)  提到:


    小弟初学ASP.net有个问题
    如果我要实现类似 <img src="/xxxx/<%=style%>/1.png" />这样的效果,
    并且一个 aspx中有很多的<img>,应该怎么办呢?

    在 code behind 中应该怎么解决?

    【 在 wesley (pine~心中的森林) 的大作中提到: 】
    ∶最好不要用asp的方法来套asp.net,应该尽可能避免在aspx页面里出现<% %>块,
    ∶因为
    ∶迄今为止我发现都可以在code behind中解决,有的时候你会在服务器端找不到个
    ∶aspx
    ∶页面中定义好的server side controle,那就应该看看code behind里面是否在
    ∶webform类里声明了一个protected的同样名字的属性,如果没有就手动加上,这可能是一
    ∶个无伤大雅的小bug。
    ∶更多的时候,可以很灵活的利用runat="server"来定义更多的控件,比如将body设成
    ∶<body id="myBody" runat="server">
    ∶然后在code behind里加上myBody的属性,就可以在Page_Load里面自定义body的一些
    ∶属性和样式了,这比在aspx页面中用<%= %>来定制漂亮得多,更重要得是,当你得程序
    ∶...................



    ☆─────────────────────────────────────☆
       wesley (心中的森林) 于  (Sat Dec 20 08:45:04 2003)  提到:

    在一个工具类(例如叫HtmlUtil,声明为sealed,并且成员全是静态的)中声明如下方法
    public static string GenImgHtmlTag(string url, string alt)
    {
        return "<img width=120 height=90 src='" + url + "' alt='" + alt + "'>";
    }

    然后在你generate页面的过程中,例如,要把这个写到一个table cell(<TD>)里边,
    可以这么写:
    TableRow oRow= new TableRow();
    oCell = new TableCell();
    oCell.Text = HtmlUtil.GenImgHtmlTag(url, alt);
    oRow.Cells.Add(oCell);
    MyTable.Rows.Add(oRow);

    其中MyTable是一个页面中设定好的RunAt="server"的 System.Web.UI.WebControls.Table
    对象,并且在你的页面inherits的class定义里边有如下的声明:

    protected System.Web.UI.WebControls.Table MyTable;

    所有的动态内容都可以通过将页面中的控件设置成runAt="server",然后在页面interits
    的class里边操纵其内容。

    【 在 phanx (向右走) 的大作中提到: 】
    ∶小弟初学ASP.net有个问题
    ∶如果我要实现类似 <img src="/xxxx/<%=style%>/1.png" />这样的效果,
    ∶并且一个 aspx中有很多的<img>,应该怎么办呢?
    ∶在 code behind 中应该怎么解决?




    ☆─────────────────────────────────────☆
       phanx (向右走) 于  (Sat Dec 20 09:46:14 2003)  提到:

    非常感谢您的解答. 可能我没有表述好我的问题.
    我的情况是这样. 当页面制作人员用 fireworks生成了一个页面,
    其中包含了大量的 <img>标签,而且src都是自动生成的切片.像这样.


              <tr>  
                <td width="187"><img src="./style/<%=style%>/images/hr_3_left_r1_c1.jpg" width="188" height="35"></td>
                <td><img src="./style/<%=style%>/images/hr_3_left_r1_c3.jpg" width="21" height="35"></td>
              </tr>

    我在程序中无法对 hr_3_left_r1_c1.jpg 这样的url进行预测,只能负责决定
    string style 的值.

    而且如果是大量的 <img>标签,每个标签都用 GenImgHtmlTag() 来生成的话,恐怕
    效率也不高.

    我希望的效果是在 Code behide 中决定了 style 的值,然后在 aspx 中输出,就像在
    ASP中用 <%=style%> 一样,只要上面给 style 赋了值,下面就可以输出.

    所以我想知道在 code behide 中能不能实现,应该怎么操作?  再次感谢.


    【 在 wesley (心中的森林) 的大作中提到: 】
    ∶在一个工具类(例如叫HtmlUtil,声明为sealed,并且成员全是静态的)中声明如下方法
    ∶public static string GenImgHtmlTag(string url, string alt)
    ∶{
    ∶return "<img width=120 height=90 src='" + url + "' alt='" + alt + "'>";
    ∶}
    ∶然后在你generate页面的过程中,例如,要把这个写到一个table cell(<TD>)里边,
    ∶可以这么写:
    ∶TableRow oRow= new TableRow();
    ∶oCell = new TableCell();
    ∶oCell.Text = HtmlUtil.GenImgHtmlTag(url, alt);
    ∶oRow.Cells.Add(oCell);
    ∶...................



    ☆─────────────────────────────────────☆
       wesley (心中的森林) 于  (Sat Dec 20 10:08:48 2003)  提到:

    这种情况嘛,要么就忍受混杂,要么统统在code_behind里边实现,包括那些
    hr_3_left_r1_c1.jpg 之类的文件名,既然你可以写在.aspx文件里边,自然也可以
    通过Response.Write写在.aspx.cs/.aspx.vb文件里边嘛。:)

    【 在 phanx (向右走) 的大作中提到: 】
    ∶非常感谢您的解答. 可能我没有表述好我的问题.
    ∶我的情况是这样. 当页面制作人员用 fireworks生成了一个页面,
    ∶其中包含了大量的 <img>标签,而且src都是自动生成的切片.像这样.
    ∶<tr>  
    ∶<td width="187"><img src="./style/<%=style%>/images/hr_3_left_r1_c1.jpg" width="188" height="35"></td>
    ∶<td><img src="./style/<%=style%>/images/hr_3_left_r1_c3.jpg" width="21" height="35"></td>
    ∶</tr>
    ∶我在程序中无法对 hr_3_left_r1_c1.jpg 这样的url进行预测,只能负责决定
    ∶string style 的值.
    ∶而且如果是大量的 <img>标签,每个标签都用 GenImgHtmlTag() 来生成的话,恐怕
    ∶效率也不高.
    ∶...................



    ☆─────────────────────────────────────☆
       phanx (向右走) 于  (Sat Dec 20 10:49:31 2003)  提到:

    我想了个笨办法,在 code behide 中利用 session .

    using System;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using DataLayer;

      public class MyDetailPage : Page
      {

            protected DataGrid MyDataGrid;
            protected Label style1;


            protected  void Page_Load(Object sender, EventArgs E)
            {
                    if (!IsPostBack)
                    {
                            if( Session["style"] == null )
                            {
                                    Session["style"] = "default";
                            }

                            style1.Text = Session["style"].ToString();
                            string style = Session["style"].ToString();

                            //BusObj bus = new BusinessLayer.BusObj();
                            DataObj data = new DataObj("server=(local)\\NetSDK;
                                            database=foo;Trusted_Connection=yes");

                            MyDataGrid.DataSource=data.GetDetail(1);
                            MyDataGrid.DataBind();
                    }
            } // end Page_Load()
      
      }

    然后在 aspx 中用一个 string 来保存 session

    <%@ Page Language="C#" Codebehind="detailpage.cs" Inherits="MyDetailPage"
    EnableSessionState=true Debug=true Trace=true %>
    <%
    string style = Session["style"].ToString();
    %>
      <asp:DataGrid id="MyDataGrid" runat="server"
        Width="700"
        BackColor="#ccccff"  
        BorderColor="black"
        ShowFooter="false"  
        CellPadding="3"
        CellSpacing="0"
        Font-Name="Courier"
        Font-Size="9pt"
        HeaderStyle-BackColor="#aaaadd"
        EnableViewState="false"
      />
    <asp:label id="style1" runat="server"/>

    <div align="center">  
      <table width="778" border="0" cellspacing="1" cellpadding="0">
        <tr>
          <td>
              <img src="./style/<%=style%>/images/temp_head.jpg" width="778" height="105">
              </td>
        </tr>
      </table>
      <table width="778" border="0" cellpadding="0" cellspacing="0" class="index">
        <tr>
          <td width="69">
              <img src="./style/<%=style%>/images/hr_2_left.jpg" width="69" height="28">
              </td>
          <td width="150"  class="bg">



    这样做可能很不规范,不知大家还有没有别的办法?

    【 在 wesley (心中的森林) 的大作中提到: 】
    ∶这种情况嘛,要么就忍受混杂,要么统统在code_behind里边实现,包括那些
    ∶hr_3_left_r1_c1.jpg 之类的文件名,既然你可以写在.aspx文件里边,自然也可以
    ∶通过Response.Write写在.aspx.cs/.aspx.vb文件里边嘛。:)




    ☆─────────────────────────────────────☆
       wesley (心中的森林) 于  (Sat Dec 20 10:54:01 2003)  提到:

    1. 能不用session就不用。
    2. 能不用<% %>就不用。

    你把的所有的html代码移到cs文件的Page_Load里边Response.Write是一种办法。

    好办法就是,把
    <table width="778" border="0" cellspacing="1" cellpadding="0">
    改成
    <table width="778" border="0" cellspacing="1" cellpadding="0"  
    ID="MyImageTable" runat="server">

    然后在Page_Load里边给MyImageTable动态添加row和cell,就如同我前面一篇文章里边的
    那段代码那样:

    TableRow oRow;
    TableCell oCell;
    foreach (string url in myUrlCollection)
    {
            oRow= new TableRow();
            oCell = new TableCell();
            oCell.Text = GenImgHtmlTag(url, alt);
            oRow.Cells.Add(oCell);
            //为该row添加其他cell
            MyImageTable.Rows.Add(oRow);
    }

    【 在 phanx (向右走) 的大作中提到: 】
    ∶我想了个笨办法,在 code behide 中利用 session .
    ∶using System;
    ∶using System.Web.UI;
    ∶using System.Web.UI.WebControls;
    ∶using DataLayer;
    ∶public class MyDetailPage : Page
    ∶{
    ∶protected DataGrid MyDataGrid;
    ∶protected Label style1;
    ∶protected  void Page_Load(Object sender, EventArgs E)
    ∶{
    ∶...................



    ☆─────────────────────────────────────☆
       phanx (向右走) 于  (Sat Dec 20 11:07:24 2003)  提到:

    呵呵,很多 ASP.net 的书籍也是这么说.
    小弟愚笨,我是从 PHP平台迁移到.net的,平常 session用惯了,
    现在做的是一个具有较复杂外观的Web,而且要实现不同的样式,所以我采用了 session来
    保存用户选择的样式.  不同的style值对应着不同的目录名字,目录下存放着不同样式的
    图片. 通过 <img src="/images/<%=style%>/foo.jpg" /> 这样的方式来实现更换样式.

    而且存在大量的 <img> ,我想如果全部放到 cs 的Page_Load()里面实现的话,
    用 MVC 模型也就没有意义了.就像传统的 perl /cgi模式了.

    如果使用了 <% %> 就有较大的灵活性. 同时也实现了 页面代码的基本分离.


    以上个人愚见,大家见笑了.欢迎批评指正.

    【 在 wesley (心中的森林) 的大作中提到: 】
    ∶1. 能不用session就不用。
    ∶2. 能不用<% %>就不用。
    ∶你把的所有的html代码移到cs文件的Page_Load里边Response.Write也不尝是一种办法。




    ☆─────────────────────────────────────☆
       wesley (心中的森林) 于  (Sat Dec 20 11:11:07 2003)  提到:

    你下载一个我写的 Mindsware DataObjects & DynamicDataSheet 去研究一下吧,
    里边你需要用到的绝大多数技巧和实现都有实现。

    包括你说的对于style的处理,可以切换不同的style,并且按用户将当前用户
    选择的style保存在session中。

    【 在 phanx (向右走) 的大作中提到: 】
    ∶呵呵,很多 ASP.net 的书籍也是这么说.
    ∶小弟愚笨,我是从 PHP平台迁移到.net的,平常 session用惯了,
    ∶现在做的是一个具有较复杂外观的Web,而且要实现不同的样式,所以我采用了 session来
    ∶保存用户选择的样式.  不同的style值对应着不同的目录名字,目录下存放着不同样式的
    ∶图片. 通过 <img src="/images/<%=style%>/foo.jpg" /> 这样的方式来实现更换样式.
    ∶而且存在大量的 <img> ,我想如果全部放到 cs 的Page_Load()里面实现的话,
    ∶用 MVC 模型也就没有意义了.就像传统的 perl /cgi模式了.
    ∶如果使用了 <% %> 就有较大的灵活性. 同时也实现了 页面代码的基本分离.
    ∶以上个人愚见,大家见笑了.欢迎批评指正.




    ☆─────────────────────────────────────☆
       phanx (向右走) 于  (Sat Dec 20 11:14:48 2003)  提到:

    不胜感激,以后还要向老兄学习和请教,先谢谢了.
    //bow

    【 在 wesley (心中的森林) 的大作中提到: 】
    ∶你下载一个我写的 Mindsware DataObjects & DynamicDataSheet 去研究一下吧,
    ∶里边你需要用到的绝大多数技巧和实现都有实现。
    ∶包括你说的对于style的处理,可以切换不同的style,并且按用户将当前用户
    ∶选择的style保存在session中。




    ☆─────────────────────────────────────☆
       wesley (心中的森林) 于  (Sat Dec 20 11:15:23 2003)  提到:

    【 在 phanx (向右走) 的大作中提到: 】
    ∶呵呵,很多 ASP.net 的书籍也是这么说.
    ∶小弟愚笨,我是从 PHP平台迁移到.net的,平常 session用惯了,
    ∶现在做的是一个具有较复杂外观的Web,而且要实现不同的样式,所以我采用了 session来
    ∶保存用户选择的样式.  不同的style值对应着不同的目录名字,目录下存放着不同样式的
    ∶图片. 通过 <img src="/images/<%=style%>/foo.jpg" /> 这样的方式来实现更换样式.
    ∶而且存在大量的 <img> ,我想如果全部放到 cs 的Page_Load()里面实现的话,
    ∶用 MVC 模型也就没有意义了.就像传统的 perl /cgi模式了.
    这个完全没道理,我看过的java MVC模型的页面实现都很少用<% %>,基本都用
    自定义jsp tag来实现页面逻辑和商业逻辑相分离。
    ∶如果使用了 <% %> 就有较大的灵活性. 同时也实现了 页面代码的基本分离.
    灵活性有了,可维护性就泡汤了。
    ∶以上个人愚见,大家见笑了.欢迎批评指正.




    ☆─────────────────────────────────────☆
       phanx (向右走) 于  (Sat Dec 20 11:20:19 2003)  提到:

    说实话,在下对于 MVC 模式的理解还不够清晰,因为以前一直是处于 web script
    模式下的混杂情况,现在迁移到 ASp.net平台以后很多东西受到以前的定式都不知
    无从下手,应该好好理一下了.  谢谢 :)

    【 在 wesley (心中的森林) 的大作中提到: 】
    ∶这个完全没道理,我看过的java MVC模型的页面实现都很少用<% %>,基本都用
    ∶自定义jsp tag来实现页面逻辑和商业逻辑相分离。
    ∶灵活性有了,可维护性就泡汤了。




    ☆─────────────────────────────────────☆
       wesley (心中的森林) 于  (Sat Dec 20 11:21:47 2003)  提到:

    强烈建议你下载一个我写的组件回去研究一下,如果用好了,节省你30%以上的工作量。

    【 在 phanx (向右走) 的大作中提到: 】
    ∶说实话,在下对于 MVC 模式的理解还不够清晰,因为以前一直是处于 web script
    ∶模式下的混杂情况,现在迁移到 ASp.net平台以后很多东西受到以前的定式都不知
    ∶无从下手,应该好好理一下了.  谢谢 :)




    ☆─────────────────────────────────────☆
       phanx (向右走) 于  (Sat Dec 20 11:24:15 2003)  提到:

    呵呵, 正在看 readme.  感谢!

    【 在 wesley (心中的森林) 的大作中提到: 】
    ∶强烈建议你下载一个我写的组件回去研究一下,如果用好了,节省你30%以上的工作量。




    ☆─────────────────────────────────────☆
       wesley (心中的森林) 于  (Sat Dec 20 11:47:40 2003)  提到:

    ∶) 多提建议啊,我好持续改进,当然现在的版本已经达到不错的应用标准了:)

    【 在 phanx (向右走) 的大作中提到: 】
    ∶呵呵, 正在看 readme.  感谢!




    上一篇
    返回上一页
    回到目录
    回到页首
    下一篇


       收藏   分享  
    顶(0)
      




    ----------------------------------------------

    -----------------------------------------------

    第十二章第一节《用ROR创建面向资源的服务》
    第十二章第二节《用Restlet创建面向资源的服务》
    第三章《REST式服务有什么不同》
    InfoQ SOA首席编辑胡键评《RESTful Web Services中文版》
    [InfoQ文章]解答有关REST的十点疑惑

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/11/9 2:26:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 点击这里发送电邮给Google AdSense  访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/31 9:53:11

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms