最近和技术主管一起开发项目,做完了我来维护,可当我维护到他的功能时,我有点郁闷,他的代码是这样写!前台除了头部样式和页脚样式,中间就一个run at server 的DIV 然后如下图的代码,对于做了一年多开发的我,没怎么看过W3C的标准,但是这样的代码确实让我觉得有眼花,不好维护。而且对方是个有10年工作经验的了,是我们开发主管。但我又说不出这样开发的各种弊端,肯请各位大神点评下,同时小弟自己也学习一下。也希望各位大神不吝赐教各种开发中应该注意的一些规范,对于各大神的贡献,小弟将感激不尽,谢谢。

解决方案 »

  1.   

    首先啊,我看不到一个//
    另外啊,把HTML代码嵌到CS代码里,不好吧,修改是不是还要重新编译上传啊
      

  2.   

    这个看个人的编程习惯了,一般的,CS代码里尽量不要写html代码。能在页面解决的就在页面解决!
    不过,有时也根据需要适当的在CS代码里有一些html的东西!看情况,呵呵!
      

  3.   

    去掉图片,上代码
     DataTable dt = new BLL.pd_ProductList().GetList(PagingNewsInfo.PageSize, pageIndex, " IsDelete=0 and Flag=0 and Trade_ID=" + tid + " and TradeCategory_ID="+id, " ID desc", out total).Tables[0];
                 Model.pd_Trade tm = new BLL.pd_Trade().GetModel(int.Parse(tid));
                string strContent = "";
                string strShowContent = "";
                for (int i = 0; i < 5; i++)
                {
                    int tmpid = i + 1;
                    if (i < dt.Rows.Count)
                    {                    strContent += "<div value='" + i.ToString() + "' class='sysmex_d_0" + tmpid.ToString() + "'><a href='ProductDetail.aspx?id=" + dt.Rows[i]["ID"].ToString() + "&tname=" + tm.TradeName + "'><img  src='" + dt.Rows[i]["ImagePath"].ToString() + "'/></a></div>";
                        string tmpContent = dt.Rows[i]["Content"].ToString();
                        if (!string.IsNullOrEmpty(tmpContent))
                        {
                            if (tmpContent.Length > 300) tmpContent = tmpContent.Substring(0, 300) + "...<br/><div class='see'style='text-align:right'><a href='ProductDetail.aspx?id=" + dt.Rows[i]["ID"].ToString() + "&tname="+tm.TradeName+"'><b>MORE</b></a></div>";
                            else tmpContent = tmpContent + "...<br/><div class='see'style='text-align:right' ><a href='ProductDetail.aspx?id=" + dt.Rows[i]["ID"].ToString() + "&tname=" + tm.TradeName + "'><b>MORE</b></a></div>";
                            strShowContent += "<div class='sysmexdetail' style='display:none'>"
                                             + "<div class='sysmex_title'><b>" + dt.Rows[i]["ProductName"].ToString() + "</b></div>"
                                             + "<div class='sysmexcon'>" + tmpContent + "</div></div>";
                        }
                        else 
                        {
                            strShowContent += "<div  class='sysmexdetail' style='display:none'>"
                                        + "<div class='sysmex_title'></div>"
                                        + "<div class='sysmexcon'></div></div>";
                        }
                    
                    }
                    else
                    {
                        strContent += "<div  value='" + i.ToString() + "' class='sysmex_d_0" + tmpid.ToString() + "'></div>";
                        strShowContent += "<div   class='sysmexdetail' style='display:none'>"
                                      + "<div class='sysmex_title'></div>"
                                      + "<div class='sysmexcon'></div></div>";
                    }
                }            divContent.InnerHtml = strContent;
               
                divContent.InnerHtml += "<div value='5' class='sysmex_06' ><a href='Sysmex.aspx?id=" + tm.ID.ToString() + "'><img src='" + tm.ImagePath + "'></a></div>";
                if (!string.IsNullOrEmpty(tm.Content))
                {
                    strShowContent += "<div class='sysmexdetail' >"
                                        + "<div class='sysmex_title'><b>" + tm.TradeName + "</b></div>"
                                        + "<div class='sysmexcon'>" + tm.Content + "</div></div>";
                }
                else
                {
                    strShowContent += "<div   class='sysmexdetail' style='display:none'>"
                                      + "<div class='sysmex_title'></div>"
                                      + "<div class='sysmexcon'></div></div>";
                }
                divShowContent.InnerHtml = strShowContent;
      

  4.   

    动态的输出div,
    我也这么搞过。
      

  5.   

    他是不是以前ASP做多了啊
    没用过asp 只听说代码和前台是混一起在
      

  6.   

    他是不是以前ASP做多了啊
    没用过asp 只听说代码和前台是混一起在
      

  7.   

    完全不一定,像我现在这个需求,页面上的html全部是后台动态输出,客户端验证也全部是动态的,用什么服务器控件,asp.net的服务器控件能满足这个需求吗,对于不同的需求有不同的解决方案,他那样写是很正常的,需求就是那样,需要这种技术手段解决。
      

  8.   

    不过你们技术经理代码还是有点问题,如果涉及到大量的拼接,那应该用StringBuilder拼接,用string一直累加的话,会造成性能的损失,同时也回给驻留池造成压力
      

  9.   

    把HTML写在后台优势就是保护HTML源码。弊端第一维护相对困难(这个我觉得是小问题),第二如果所有的页面都是这样的话,就无端的增加服务器后台的计算量(这个依赖于浏览该网页的人数了,如果用户量小的话,对于后台计算下HTML源码几乎可以忽略吧)所以个人认为总体上不至于有太严重的弊端或者太大的优势,所以可能就如楼上的兄弟所说受ASP的影响吧
      

  10.   


    我基本没有在后台写过html代码返回,后台的都是数据绑定和一些操作。因为asp.net本身写法就是一个前后台分离的 protected void Bind()
            {
                int totalCount = 0;
                if (txtId.Text.Trim() == "")
                {
                    return;
                }
                rptProject.DataSource = BLL.PagingLogic.ExecutePage("(SELECT p.*,c.CompanyCode FROM dbo.us_CompanyProject p LEFT JOIN dbo.us_CompanyList c ON c.ID=p.CompanyID) t1", "*", "Orderby", GetWhere(), PagingDataInfo.CurrentPageIndex, 10, ref  totalCount);
                rptProject.DataBind();
                PagingDataInfo.RecordCount = totalCount;
                rptProjectDetail.DataSource = null;
                rptProjectDetail.DataBind();
            }
            protected string GetWhere()
            {
                string where = " IsDelete=0 ";
                if (txtId.Text.Trim() != "")
                {
                    if (StringPlus.SqlFilter(txtId.Text))
                        return where;
                    where += " and CompanyCode ='" + txtId.Text.Trim() + "'";
                }
                return where;
            }
            protected void PagingDataInfo_Click(object sender, EventArgs e)
            {
                Bind();
            }        protected void btnSelect_Click(object sender, EventArgs e)
            {
                PagingDataInfo.CurrentPageIndex = 1;
                Bind(); 
            }        protected static string ProjectName = "";
            protected static int Count = 0;
            protected void rptProject_Command(object source, RepeaterCommandEventArgs e)
            {
                if (e.CommandName == "getproject")
                {
                    if (e.CommandArgument != null && e.CommandArgument.ToString() != "")
                    {                    string[] value = e.CommandArgument.ToString().Split('|');
                        List<Model.us_CompanyProjectList> companyProjectLists =
                            new BLL.us_CompanyProjectList().GetModelList(" Project_ID=" + value[0]);
                        Count = companyProjectLists.Count;
                        rptProjectDetail.DataSource = companyProjectLists;
                        rptProjectDetail.DataBind();
                        new BLL.sys_TrafficStatistics().UpdateViewRecord(TableName.pd_ProductList, Convert.ToInt32(value[0]));
                        if (value.Length >= 3)
                        {
                            ProjectName = value[2];
                            MessageBox.ResponseScript(this, "setClass('" + value[1] + "')");
                        }                }
                }
            }
        }
      

  11.   


    这个是对的。还有如果为了逻辑清晰的话,我还喜欢使用string.format
      

  12.   

    String.format可以用,其实也是调用了StringBuiler的AppendFormat而已
      

  13.   


    但是这个页面只是因为一些样式上的布局而这样用的,如果单纯是样式的问题我觉得怎么说都还是在前台通过CSS或JS来实现好,这样方便程序员维护,也方便美工啊!
      

  14.   


    嗯!是的。string 拼接,每次都是重新赋值!而不是直接在后面加上。
      

  15.   

     ASP 的代码是这个规范的,那里搞个什么后台,全部都是在前台写的代码.ASP项目一般都不大,维护要看个人习惯了.一般看AS 的代码都是一目十行来的.我觉得很正常.我个人觉得这个代码还是挺规范的. 
      

  16.   

    如何维护只顾个人习惯的话,那在团队中不好配合啊。而且当别人修改代码的时候会很费劲啊。而且这个不是ASP.    是ASP.NET!!
      

  17.   

    将html代码全部写cs里面我也干过,这样可以大大提高代码模块的重用性,在前台只需要一个<%= str%>就直接出来,对html的感觉好的话这样写也完全没问题,而且说到维护的话 到时候只要注释加的全,修改代码,在vs中运行一下,然后就相应的dll文件覆盖掉,就直接给更新了,
    在线改用<% foreach()%>的方法在前台写html了,
    个人觉得这些写法都没啥大的弊端,哪个喜欢用哪个写吧
      

  18.   

    正好我最近在做一个项目也是在cs里面写html,不过我是webservice给ajax调用,其中有些还调用js的方法;你主管的代码乍一看手比较晕,一点注释都没
      

  19.   

    你们技术主管水了
    就算那不考虑维护的问题,最起码拼接也不该那样写
    应该用StringBuiler...然后AppendFormat...
    如果不能把他干掉,那就走人吧...
      

  20.   

    当你看到整个页面 html 代码都是js 输出拼凑的 时候 你是什么感觉??