[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 这样就算可以了,我所能理解的也就理解到这,欢迎大家指正批评,谢谢~