[c#] [一般] 说说我理解的cms

我所理解的cms:

简单的说:无非就是后台获取数据替换前台的自定义标签;

但怎么设计的更合理化就有很多的版本,我自己也在尝试,整了两套东西出来,基准基本一致;

一.以js为主或jquery为主  html版本

  js的话主要分这几个步骤

   1.纯html中添加一些维属性 如下  自定义了 rule/obj/field/et/label等等 代表的意思呢

      obj:表名;filed:字段名;et:字段类型  其他的就不说了

       申请日期
                        </td>
                        <td class="tdContent" colspan="1">
                            <input type="hidden" name="textfield2" rule="GE|now" obj="DBNeedError" field="AppTime"
                                et="datetime" rt="label"  />
                        </td>

    2.定义完成后 当然要生成真正的html了,首先需要从后台获得数据,我这里直接用ajax action过去了 怎么过去的大家随意

  $.ajax({ url: "/DataRequirementLoder.data?rnd=" + Math.random(), data: { PKID: Request["PKID"] }, success: function (result) {

   3.后台获取数据

 [DataLoader(Uri = "DataRequirementLoder")]
        public class DataRequirementLoder : BaseFun, IDataLoader
        {、
}

  4.这样基本上就算是一个循环了 其他类似 最后就看你怎么处理了,可以用json传值过去  增删改查基本上都类似 可以自定义做成公共的~

二. c#后台为主 服务器控件类型的

   1.前台基本类似 也是自定义一些维属性 这里不做代码呈现

   2.获取后台原始数据 [前台代码]  这里加了一个按照表头排序的功能 大家随意

  function getdb(guid, sort) {
            if (sort != "") {
                sort = "[" + sort + "]";
                if (sortdir == " desc ") {
                    sortdir = " asc ";
                    sort += sortdir;
                }
                else {
                    sortdir = " desc ";
                    sort += sortdir;
                }
            }
            $.ajax({
                type: "get",
                async: true,
                dataType: "html",
                data: "d",
                url: "getajax.aspx?oper=leftmenu&type=gets&rnd=" + Math.random() + "&sort=" + sort,
                error: function (XmlHttpRequest, textStatus, errorThrown) { alert(XmlHttpRequest.responseText); },
                success: function (d) {
                    $("#gettables").html(d);
                }
            });

        }

  3.后台获取数据源  这个就比较简单了 看2前台就知道了 这个获取数据源就简单多了  这里简单处理了下 后台直接拼接的html标签 输出到前台
  Response.Write(i.ToString());

  4.给大家再贴上c# 保存的公共方法吧~ 当然更新其实也是类似的  这个一般写框架的时候经常用到 放到基类里就行了 原理就是 循环当前page页面中所有的控件  依次比较 保存到某个地方 然后根据字段或值 拼写成字符串  下面是核心代码

 private void ControlValues(Control ctrl)
        {
            DataField = "";
            switch (ctrl.ToString())
            {
                case "System.Web.UI.WebControls.TextBox":
                    Value = ((TextBox)ctrl).Text;
                    DataField = ((TextBox)ctrl).Attributes["DataField"];
                    break;
                case "System.Web.UI.WebControls.Label":
                    Value = ((Label)ctrl).Text;
                    DataField = ((Label)ctrl).Attributes["DataField"];
                    break;

                case "System.Web.UI.WebControls.DropDownList":

                    Value = ((DropDownList)ctrl).SelectedValue;
                    DataField = ((DropDownList)ctrl).Attributes["DataField"];

                    break;
                case "System.Web.UI.HtmlControls.HtmlInputText":
                    Value = ((HtmlInputText)ctrl).Value;
                    DataField = ((HtmlInputText)ctrl).Attributes["DataField"];

                    break;
                case "System.Web.UI.HtmlControls.HtmlSelect":

                    Value = ((HtmlSelect)ctrl).Value;
                    DataField = ((HtmlSelect)ctrl).Attributes["DataField"];

                    break;
                case "System.Web.UI.HtmlControls.HtmlInputHidden":

                    Value = ((HtmlInputHidden)ctrl).Value;
                    DataField = ((HtmlInputHidden)ctrl).Attributes["DataField"];

                    break;
                case "System.Web.UI.HtmlControls.HtmlTextArea":

                    Value = ((HtmlTextArea)ctrl).Value;
                    DataField = ((HtmlTextArea)ctrl).Attributes["DataField"];

                    break;

                case "System.Web.UI.WebControls.RadioButtonList":

                    Value = ((RadioButtonList)ctrl).SelectedValue;
                    DataField = ((RadioButtonList)ctrl).Attributes["DataField"];

                    break;
                case "System.Web.UI.WebControls.CheckBox":
                    if (((CheckBox)ctrl).Checked == true)
                    {
                        Value = "1";
                    }
                    else
                    {
                        Value = "0";
                    }
                    DataField = ((CheckBox)ctrl).Attributes["DataField"];
                    break;
                case "System.Web.UI.WebControls.CheckBoxList":
                    System.Web.UI.WebControls.CheckBoxList chklist = (System.Web.UI.WebControls.CheckBoxList)ctrl;

                    for (int i = 0; i < chklist.Items.Count; i++)
                    {
                        if (chklist.Items[i].Selected)
                            Value += chklist.Items[i].Value + ";";
                    }
                    DataField = ((CheckBoxList)ctrl).Attributes["DataField"];

                    break;
            }
            if (DataField != "" && DataField != null)
            {
                AddTable(DataField, Value);
            }
        }

 

 

ok  这样就算可以了,我所能理解的也就理解到这,欢迎大家指正批评,谢谢~

 

posted on 2013-11-26 23:42  小小文豪  阅读(822)  评论(0编辑  收藏  举报

导航