需求:客户需要对首页显示的各个模块进行定制显示,按照自己排序和选择需要显示的模块进行显示。
页面上的各个模块是用div排布的,现在我给每个div加了runat=server,进行控制显示。目前显示已经没问题了,就是排序不知道该如何弄?
因为页面上的div本来就有顺序了,我在数据库中的排序不知如何使用过来?

解决方案 »

  1.   

    1: 绝对定位
    2: 动态生成html元素
      

  2.   


     ajax 里不是有一个 层拖吧,用它排序行不行?
      

  3.   

    排序是保存到数据库中的。
    ajax的层拖可以保存到数据库吗?下次打开是我上次保存的?
    还有就是用webpart应该怎么用?能不能保存顺序到数据库?
      

  4.   

    你应该把每一个模块作为一个ascx。你首先在一个测试页面上实验,把页面上放入许多个不同应用的ascx,甚至同一应用ascx放入多个实例,看看是否正常,这些ascx是否位置正常可调、回发操作等是否逻辑正常一致、是否一个局部的会在其它地方操作造成回发时数据混乱状态丢失。如果不正常,先修改ascx设计。第二层,你开发一个“调用应用.ascx”用户控件。设置它的一个参数获得要动态显示的应用名称。在page_load时它可以根据名称,查询此应用名称对应的ascx文件的名称,使用LoadControl方法动态装入用户控件到自己的controls里。最后,对于页面设计,你的后台(数据库)应该可以保存每一个客户的“应用排序”,类似于    客户桌面排序(客户名称,应用名称,序号)这样的数据表。这样页面上可以使用一个DataList+(SQL/Object)DataSource,这个数据源控件上设置的SelectMethod方法执行时从参数获得用户身份,返回客户桌面排序表按照序号的查询结果,这个DataList的模板中放入“调用应用.ascx”控件并将控件的那个属性绑定到查询结果“应用名称”列上。
    咦?我不是刚刚写过一个“考卷”的界面设计框架?!
    其实大体上都是一样的,使用控件把应用开发作为分解多种可装配件进行多分头开发。你在底层还没有开发好之前,就可以测试高层的界面组件,使用“Mock”的控件。只要在最初把接口设计好,需要的交互流程设计好,就可以保证将来装配成功。
    呵呵,开发组件需要你忘记开发页面时拼凑的很多低级写法,因为组件需要能够放在页面上任何地方、同时放多个实例、无论别的地方如何交互回发也不丢状态,这需要对asp.net有一个真实和深入的了解。
      

  5.   

    “页面上的各个模块是用div排布的,现在我给每个div加了runat=server,进行控制显示。”你的这个想法的出发点和客户对你的技术的认识之间差别很大。你基本上还是“写个页面”那个思路得到的固定思路,只要有个自己觉得漂亮的界面就永远不像灵活调整了。如果我管理asp.net项目(我其实已经自我淘汰了asp.net这个开发平台),我会对能够把应用写为可装配组件并且可以考虑到theme调整的程序员看作正规的程序员(因为他们的东西都要经过不断结合市场需要重新拼拼接接或者注册点事件代码进行扩展才能成为产品),对只能开发页面的程序员看作补充。
      

  6.   

    我觉得用webpart比较好.
    或你看看这个东西
    http://demos.telerik.com/ASPNET/Prometheus/Window/Examples/Overview/DefaultCS.aspx
      

  7.   

    不是很难吧个人认为sp1234在七楼所示方法过于烦琐,并会产生更多非必要客欢代码.百度博客、新浪博客、QQZone都是综合应用了DIV+CSS JAVASCRIPT AJAX产生的效果,没必要把事情想象的那么复杂吧.不知sp1234是否玩过EXTJS,少量JAVASCRIPT+JSON即可产生无限自由可控页面(模块).与其编写大量自定义控件(虽然你可以面向对象),不如在客户端直面对象的好.使用简单的Json结构数据既可控制显示种种,何乐不为?
      

  8.   

    你的意思是比如有12个需要显示的模块就做12个ascx用户控件(每个里面是一个模块的显示内容),然后再增加一个调用这些模块的ascx用户控件并且在此用户控件中使用LoadControl方法动态装入用户控件到自己的controls里。
    这个“调用应用.ascx”里面的代码是不是可以这样写:
    if(sort==1)
    {
    Control toAdd = LoadControl("WebUserControl_01.ascx","Sahil Malik",5) ;
    PlaceHolder1.Controls.Add(toAdd);
    }
    else if(sort==2)
    {
    Control toAdd = LoadControl("WebUserControl_02.ascx","Sahil Malik",5) ;
    PlaceHolder1.Controls.Add(toAdd) ;
    }
    最后把“调用应用.ascx”放入首页面?感谢sp1234提供的思路
      

  9.   

    应用DIV的流式布局,很好控制
      

  10.   

    控制不了排序顺序,在aspx文件中div已经是按照既定顺序排列了如:
    <div id="div1" runat="server">this for one</div>
    <div id="div2" runat="server">this for two</div>
    怎么能在后台程序中将div2排到div1左边或者上边呢?这样的div有几十个之多。
    sp1234说的办法我正在试验,因为以前没用过placeholder
      

  11.   

    谢谢sp1234的思路,按照你说的做起来简单容易管理,目前已经完成了。
    如果使用div是无法实现排序的,其他办法我还真想不出来。