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

一、背景

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

二、问题分析

  要想控制页面开关显示,就得有存储开关信息的介质,将在后台产生的操作记录下来,并在浏览者加载首页之时能读取操作记录并达到控制页面开关的目的。因此,考虑两种介质储存开关记录信息,一是用数据库mysql,二是用xml。考虑到这对数据库的功能大材小用,并且会增加首页加载时对数据库资源消耗,所以考虑使用xml文档来记录开关记录才是两者中较好的选择。这里需要我们做一下前期工作,先设计xml的结构:

  

<?xml version="1.0" encoding="gb2312"?>
<Settings>
  <Setting ID="1">
    <title>****</title>
    <status>true</status>
  </Setting>
</Settings>

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

三、解决思路或过程

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

  js代码:

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

  html代码:

<input name="switch-field-1" class="ace ace-switch ace-switch-6" type="checkbox" onclick="Controller()" />

  ajax中的data,在这里不标出。触发后台action一次,那么就会运行action中操作xml的代码,那么就会改变xml中记录的值。

  然后,是action中操作xml的实现。思路是:首先要获取xml在应用程序中的相对位置,然后便是更改xml的值。

 public string Xmlpath = HttpRuntime.AppDomainAppPath.ToString() + "/Xml/ServiceSettings.xml";

        public ActionResult Controller()
        {
            OperateXml sx = new OperateXml();
            sx.modifyXml(Xmlpath);
            return Json("");
        }

  说明的是:HttpRuntime.AppDomainAppPath.ToString();方法可以获取当前应用程序所在的根目录。为了操作多个xml文件,我写了OperateXml一个类方法,这里进入对xml的操作细节介绍。

  对于xml操作的原理不多说,其实ado.net支持的也很棒,xml文档的结构类似于html,但它的自由度更高,可标记性也更高。不多说,直接上代码,注释里都解释了:

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

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

  接着,就是前台的读取xml里的值。思路是:在动态页面里读取xml值,然后做判断,true则显示页面,false则不显示页面。这里读xml代码贴出,注释里解释详细了。需要说明的是:这里为了控制多个页面的显示,用了List<string>来转载多个status的值。

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

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

@using TheOne.Tool
@{
    OperateXml sx = new OperateXml();
    List<string> list = new List<string>();
    string path = HttpRuntime.AppDomainAppPath.ToString() + "/Xml/QuickServiceSettings.xml";
    list = sx.getAllXml(path);
    string 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="/UmbrellaManage/CreateUmbrellaUser"><img src="/Content/FrontEnd/images/yusan_2.jpg" class="img-responsive" alt=""></a>
        </div>
        <div class="blog-grid-right">
            <h5><a href="/UmbrellaManage/CreateUmbrellaUser">借用雨伞</a> </h5>
        </div>
        <div class="clearfix"> </div>
    </div>

}
else if (status_Umbrella == "false")
{

}

  到这里,使用xml控制页面开关介绍基本结束。

四、总结

  思路中最核心的便是对xml的操作,修改xml和读取xml。而对于如何实现checkbox状态切换,这个实现可以使用js来操作,读出status值,并让相应的js代码控制checkbox的状态是选中还是未选中。实际项目演示地址:点击 南农工红会

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

时间: 2024-10-24 11:59:07

asp.net mvc后台操作之读写xml控制首页动态页面开关显示的相关文章

ASP.NET MVC 表格操作

Beginners Guide for Creating GridView in ASP.NET MVC 5 http://www.codeproject.com/Articles/1114208/Beginners-Guide-for-Creating-GridView-in-ASP-NET-M?msg=5291877#xx5291877xx GridView with Server Side Filtering, Sorting and Paging in ASP.NET MVC 5 htt

转载:ASP.NET MVC扩展自定义视图引擎支持多模板&amp;动态换肤skins机制

ASP.NET mvc的razor视图引擎是一个非常好的.NET MVC框架内置的视图引擎.一般情况我们使用.NET MVC框架为我们提供的这个Razor视图引擎就足够了.但是有时我们想在我们的项目支持多模板&skins机制,比如我们可能会有多套的模板,也就是多个View风格,而我们只需要改一下配置文件就可以轻松的改变页面的风格和模板.实现这个功能有两种方式: 一.使用接口IViewEngine自己完成一个类似Razor视图引擎的功能. 二.继承类RazorViewEngine类,重写它的一些方

Asp.Net Mvc后台数据验证自测小Demo

*.这里只做后台数据验证,利用mvc数据验证标记验证数据,并获取错误信息提示后页面中. 1.实现效果如下: 2.model类 People.cs using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace WebTest.Areas.Validation.Models { pub

ASP.NET MVC后台管理系统之让客户心动的界面

在上一篇博客中介绍了一下我在快速开发框架中一些UI的设计,这篇文章继续往下讲,主要讲下基于BS架构后台管理系统中一些界面的设计思路. 百闻不如一见,demo地址放出来给大家参考一下 地址:http://121.40.148.178:8080/ . 用户名:guest,密码:123456 一.列表页面 列表页面我用的是Jqgrid插件,这个表格插件是开源的,而且功能丰常强大的,有兴趣的朋友可以去看看我系统中的Demo,所有的列表页面都是基于这个插件做的 很多朋友可能感觉用表格插件会比较复杂,其实不

ASP.NET MVC后台管理系统精美UI设计

现在越来越多的系统都是BS架构,什么样的界面风格才更加大气.美观.实用呢? 先给大家看一下我自己做的后台系统风格,然后再讲几个主要的界面 地址:http://121.40.148.178:8080/ . 用户名:guest,密码:123456 一.整体部局 现在的管理系统比较流行把界面做得跟CS应用程序很像,让人一眼看去都以为是CS程序,的确那样看起来很大气,很漂亮. 以往的做法,通常是在工作区只能显示一个功能页面,打开一个新的功能以后页面就跳转了,当用户需要同时打开两个功能的时候就很蛋疼,所以

asp.net mvc 后台怎么接受前端返回的array list dictionary

参考了别人的文章,我这样尝试去写: 数据源:memberInRoles 1 var memberInRoles= {}; 2 for(var i=0;i<sureOptions.length;i++){ 3 memberInRoles["memberInRoles["+i+"].UserId"]=sureOptions[i].value; 4 memberInRoles["memberInRoles["+i+"].RoleId&q

互动媒体学习社区-ASP.NET MVC 后台用户管理模块

在后台用户管理模块中: 用户一共分为三类:0代表注册会员,1代表管理员,2代表超级管理员 页面与功能: 用户列表页. 显示所有用户(管理员,超级管理员) 根据条件查询指定用户(Email,状态)(管理员,超级管理员) 删除用户.(超级管理员) 修改用户状态.(管理员,超级管理员) 跳转至详细页.(管理员,超级管理员) 跳转至新增页面(超级管理员) 用户详细页. 显示用户详细信息. 调整用户类型(超级管理员) 修改用户状态(管理员,超级管理员) 用户新增页面. 新增用户.(超级管理员) 修改密码页

ASP.NET MVC利用ajax把action的JavaScript注册到页面并执行

相信大家在做Webform时经常会遇到在页面的后台CS文件中根据数据运行结果修改页面显示样式.显示(隐藏).或者弹出框,当时我们会用到ScriptManage或者Page来向页面注册一段js来实现页面加载显示我们需要的效果. 在MVC中没了ScriptManage.Page对象让我们轻松向页面注册脚本,只能麻烦一点通过ajax来完成. 先决条件: 1.首先需要在加载的页面中引用Jquery包和unobtrusive-ajax <script type="text/javascript&qu

ASP.NET MVC Session 过期验证跳转至登入页面

一.在要检查登入的控制器上继承 CheckLoginController 类 2. CheckLoginController 类的写法 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace TaskManagement.Controllers { public class CheckLoginController :