你的位置:首页 > ASP.net教程

[ASP.net教程]asp.net mvc后台操作之读写xml控制首页动态页面开关显示


一、背景

  在asp.net mvc项目里,用户需要开拓几个活动版面,并以侧栏的方式呈现在首页右侧,几个活动时间不一致,为避免浏览者在活动未开放之时进入未开放的服务页面。因此不仅需要在活动代码中加入限制功能,也需要在前台取消不合时宜的页面的展示。

二、问题分析

  要想控制页面开关显示,就得有存储开关信息的介质,将在后台产生的操作记录下来,并在浏览者加载首页之时能读取操作记录并达到控制页面开关的目的。因此,考虑两种介质储存开关记录信息,一是用数据库mysql,二是用

  

<??><Settings> <Setting ID="1">  <title>****</title>  <status>true</status> </Setting></Settings>

说明的是:ID是对应多个纪录的setting区分标记,title是设置页面的名字,也就是服务的名字,status表明当前的服务页面的状态,有两个值:true or false。在项目里添加名为ServiceSettings.

三、解决思路或过程

  首先,产生开关操作需要页面上的控件,这里使用的checkbox标签,当然这不是唯一选择,朋友们可以用其他的标签来作为输入控件的使用。思路是:我触击checkbox,对应的js代码记录值,并以ajax上传至后台action中,后台的action作出反应。

  js代码:

 function BloodController() {    $.ajax({      type: "POST",      url: "/Admin/Controller",      data: {},      dataType: "Json"    });  }

  html代码:<input name="switch-field-1" type="checkbox" onclick="Controller()" />

ajax中的data,在这里不标出。触发后台action一次,那么就会运行action中操作

  然后,是action中操作

  

 public string "/";        public ActionResult Controller()    {      Operate= new Operatereturn Json("");    }

说明的是:HttpRuntime.AppDomainAppPath.ToString();方法可以获取当前应用程序所在的根目录。为了操作多个

对于

 

public void modifystring Path)    {      = new = "Settings").ChildNodes;//获取bookstore节点的所有子节点      foreach (in nodeList)//遍历所有子节点      {        = (//将子节点类型转换为        if (xe.GetAttribute("ID") == "1")        {          = xe.ChildNodes;//继续获取xe子节点的所有子节点          foreach (in nls)//遍历          {            = (//转换类型            if (xe2.Name == "status")//如果找到            {              if (xe2.InnerText != "false")              {                xe2.InnerText = "false";//则修改                break;//找到退出来就可以了                }              else if (xe2.InnerText == "false")              {                xe2.InnerText = "true";//则修改                break;//找到退出来就可以了                }            }          }          break;        }      }      //保存。    }

因为代码注释里解释得够清晰了,这里不做赘述,需要说明一点是:这里的status只有两个值:true or false;我们在前台读出的便是这两个值,来进行页面控制的。

  接着,就是前台的读取

  

public List<string> getAllstring Path)    {      string status = "";      = new = doc.SelectSingleNode("Settings");      = null;      xnl = xn.SelectNodes("/Settings/Setting/status");      List<string> list = new List<string>();      foreach (in xnl)      {        status = xn1.InnerText;        list.Add(status);      }      return list;    }

需要说明的是:这里为了控制多个页面的显示,用了List<string>来转载多个status的值。在前台页面里页面里就这样实现:

@using TheOne.Tool@{  Operate= new Operate<string> list = new List<string>();    string path = HttpRuntime.AppDomainAppPath.ToString() + "/";  list = sx.getAllstring status_Umbrella = list[0].ToString();  //string status_Bottle = list[1].ToString();  //string status_Older = list[2].ToString();  //string status_Blood = list[3].ToString();}@if (status_Umbrella == "true"){  <div class="blog-grids wow fadeInDown" data-wow-duration=".8s" data-wow-delay=".2s">    <div class="blog-grid-left">      <a href="http://www.cnblogs.com//UmbrellaManage/CreateUmbrellaUser"><img src="http://www.cnblogs.com//Content/FrontEnd/images/yusan_2.jpg" class="img-responsive" alt=""></a>    </div>    <div class="blog-grid-right">      <h5><a href="http://www.cnblogs.com//UmbrellaManage/CreateUmbrellaUser">借用雨伞</a> </h5>    </div>    <div class="clearfix"> </div>  </div>}else if (status_Umbrella == "false"){}

到这里,使用

四、总结

思路中最核心的便是对

如果我思路和方法有误,恳请各位指正,虚心求教。转载请注明来源与出处,谢谢合作 By 点将台无将