文档章节

在MVC下如何使用ajax实现表单内容的管理-二

jamesvon
 jamesvon
发布于 2016/04/20 11:17
字数 1336
阅读 5
收藏 0

我们下面对模块中的文件管理进行讲解:

1、模块文件列表管理:

模块文件列表是根据模块信息获取的,因此入口是带有模块ID的;

根据模块特点,我们建立一个与表结构ModuleInfo对应的AdminModuleSQLModel;

    public class AdminModuleModel
    {
        /// <summary>序号</summary>
        [Required]
        [Display(Name = "序号")]
        public int ID { get; set; }
        /// <summary>网站序号</summary>
        [Required]
        [Display(Name = "网站序号")]
        public int SiteIdx { get; set; }
        /// <summary>模块名称</summary>
        [Display(Name = "模块名称")]
        public string ModuleName { get; set; }
        /// <summary>版本信息</summary>
        [Display(Name = "版本信息")]
        public string Version { get; set; }
        /// <summary>作者</summary>
        [Display(Name = "作者")]
        public string Author { get; set; }
        /// <summary>版权所有</summary>
        [Display(Name = "指定配置项")]
        public string Owner { get; set; }
        /// <summary>版权说明</summary>
        [Display(Name = "版权说明")]
        public string Copyright { get; set; }
        /// <summary>有效期</summary>
        [Display(Name = "有效期")]
        public DateTime AvailDate { get; set; }
        /// <summary>说明</summary>
        [Display(Name = "说明")]
        public string Note { get; set; }
    }
    public class AdminModuleSQLModel : AdminModuleModel
    {
        /// <summary>创建或升级用SQL</summary>
        [Display(Name = "创建或升级用SQL")]
        public string InitSQL { get; set; }
        /// <summary>删除SQL</summary>
        [Display(Name = "删除SQL")]
        public string DelSQL { get; set; }
    }

这样写的原因是因为模块还要有自己的列表及管理,在那里是不需要大字段InitSQL和DelSQL信息用于展示的,因此我们将两个信息从基本信息中拿了出来,但作为我们这个页面是模块的所有信息的展示,因此我们建立一个从基本信息AdminModuleModel继承过来的包含大字段InitSQL和DelSQL信息的AdminModuleSQLModel类用于展示模块的所有内容信息。

下面我们给出Controller的代码

        public ActionResult ModuleDetails(int id)
        {
            AdminModuleSQLModel model = new AdminModuleSQLModel();
            ModuleCtrl ctrl = new ModuleCtrl(null);
            ModuleInfo info = ctrl.GetByModule((int)id);
            model.ID = info.ID;
            model.SiteIdx = info.SiteIdx;
            model.ModuleName = info.ModuleName;
            model.Version = info.Version;
            model.Author = info.Author;
            model.Owner = info.Owner;
            model.Copyright = info.Copyright;
            model.AvailDate = info.AvailDate;
            model.InitSQL = ctrl.GetInitSQL(info.ID);
            model.DelSQL = ctrl.GetDelSQL(info.ID);
            ViewBag.ModuleFiles = (new ModuleFileCtrl(null)).ListByModuleFile((int)id);
            return View(model);
        }

在Controller中首先查询出model的基本信息,然后调用出基本信息外的大字段信息,这是因为ModuleCtrl 类中,这两部分是分别实现的,当然这要根据项目特点和编程习惯来定的。然后系统通过ModuleFileCtrl提取了该模块所包含的所有文件列表信息,将这一信息放到ViewBag中,命名为ModeleFiles。这样查询工作就ok了,下面我们研究如何对这一信息进行展示。

@model VonPortal.Web.Models.AdminModuleSQLModel
@{
    ViewBag.Title = "Details";
    Layout = "~/Views/Shared/_Admin.cshtml";
}
@section HeadScript{
<script src="/Scripts/jquery.form.js" type="text/javascript"></script>
}
<h2>Details</h2>
<div>
    <h4>模块信息</h4>
    <hr />
    <dl class="dl-horizontal">
        <dt>@Html.DisplayNameFor(model => model.ModuleName)</dt>
        <dd>@Html.DisplayFor(model => model.ModuleName)</dd>
        <dt>@Html.DisplayNameFor(model => model.Version)</dt>
        <dd>@Html.DisplayFor(model => model.Version)</dd>
        <dt>@Html.DisplayNameFor(model => model.Author)</dt>
        <dd>@Html.DisplayFor(model => model.Author)</dd>
        <dt>@Html.DisplayNameFor(model => model.Owner)</dt>
        <dd>@Html.DisplayFor(model => model.Owner)</dd>
        <dt>@Html.DisplayNameFor(model => model.Copyright)</dt>
        <dd>@Html.DisplayFor(model => model.Copyright)</dd>
        <dt>@Html.DisplayNameFor(model => model.AvailDate)</dt>
        <dd>@Html.DisplayFor(model => model.AvailDate)</dd>
    </dl>
    <table class="table" id="moduleFiles">
        <tr>
            <th>文件序号</th>
            <th>文件名称</th>
            <th>文件类型</th>
            <th>文件目录</th>
            <th></th>
        </tr>
        @foreach (VonPortal.Web.Models.ModuleFileInfo file in ViewBag.ModuleFiles)
        {
        <tr>
            <td>
                @(file.ID.ToString())
            </td>
            <td>
                @(file.Filename)
            </td>
            <td>
                @(file.FileExt)
            </td>
            <td>
                @(file.FilePath)
            </td>
            <td>
                <input type="button" value="删除" id="ModuleFileDelete" data-bind="@(file.ID)" />
            </td>
        </tr>
        }
    </table>
</div>

这样基本信息的展示就ok了,下面我们将开始编写View

@model VonPortal.Web.Models.AdminModuleSQLModel
@{
    ViewBag.Title = "Details";
    Layout = "~/Views/Shared/_Admin.cshtml";
}
<h2>Details</h2>
<div>
    <h4>模块信息</h4>
    <hr />
    <dl class="dl-horizontal">
        <dt>@Html.DisplayNameFor(model => model.ModuleName)</dt>
        <dd>@Html.DisplayFor(model => model.ModuleName)</dd>
        <dt>@Html.DisplayNameFor(model => model.Version)</dt>
        <dd>@Html.DisplayFor(model => model.Version)</dd>
        <dt>@Html.DisplayNameFor(model => model.Author)</dt>
        <dd>@Html.DisplayFor(model => model.Author)</dd>
        <dt>@Html.DisplayNameFor(model => model.Owner)</dt>
        <dd>@Html.DisplayFor(model => model.Owner)</dd>
        <dt>@Html.DisplayNameFor(model => model.Copyright)</dt>
        <dd>@Html.DisplayFor(model => model.Copyright)</dd>
        <dt>@Html.DisplayNameFor(model => model.AvailDate)</dt>
        <dd>@Html.DisplayFor(model => model.AvailDate)</dd>
    </dl>
    <table class="table" id="moduleFiles">
        <tr>
            <th>文件序号</th>
            <th>文件名称</th>
            <th>文件类型</th>
            <th>文件目录</th>
            <th></th>
        </tr>
        @foreach (VonPortal.Web.Models.ModuleFileInfo file in ViewBag.ModuleFiles)
        {
        <tr>
            <td>
                @(file.ID.ToString())
            </td>
            <td>
                @(file.Filename)
            </td>
            <td>
                @(file.FileExt)
            </td>
            <td>
                @(file.FilePath)
            </td>
            <td>
                <input type="button" value="删除" id="ModuleFileDelete" data-bind="@(file.ID)" />
            </td>
        </tr>
        }
    </table>
    @using (Html.BeginForm("ModuleDetails", "Admin", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
    @Html.AntiForgeryToken()
    <div class="form-group">
        @Html.LabelFor(model => model.InitSQL, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.TextAreaFor(model => model.InitSQL, new { @class = "form-control", @style = "margin: 0px; width: 100%; height: 103px;" })
            @Html.ValidationMessageFor(model => model.InitSQL, "", new { @class = "text-danger" })
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.DelSQL, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.TextAreaFor(model => model.DelSQL, new { @class = "form-control", @style = "margin: 0px; width: 100%; height: 103px;" })
            @Html.ValidationMessageFor(model => model.DelSQL, "", new { @class = "text-danger" })
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="执行" class="btn btn-primary" />
        </div>
    </div>
}
</div>

这样就完成了基本模块文件列表及模块自身信息的展示的展示功能,这里需要说明一下:

表格及模块信息的内容是没有包含在Form里面的,因为那里的操作我们将使用ajax来完成,而下面的InitSQL和DelSQL我们将采用提交的形式完成模块的SQL的初始化,以及内容的更新操作。

那么对应SQL的执行操作的Controller代码如下:

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> ModuleDetails(AdminModuleSQLModel model)
        {
            ModuleTask task = new ModuleTask(null);
            string OrgInitSQL = await task.GetInitSQL(model.ID);
            //InitSQL每次修改后都将被执行,这就意味着每次都是新增或调整用的SQL,故每次执行的SQL会自动完成叠加存储,这样就可以保存为最完整的执行过程,以便今后重建执行。
            await task.SetInitSQL(model.ID, OrgInitSQL + "\r\n" + model.InitSQL);
            await task.SetDelSQL(model.ID, model.DelSQL);
            VonCfgSection sct = VonCfgSectionGroup.GetSectionParams("VonPortal/" + model.Owner);
            string connName = (string)sct[sct.DefaultProvider[0]].Params["connectionName"];
            //执行 model.InitSQL 语句,略...。
            return RedirectToAction("ModuleList");//返回模块列表,不在本文的讨论范围。
        }

接下来我们将研究如何实现文件的上传和文件列表的添加。

© 著作权归作者所有

jamesvon
粉丝 3
博文 31
码字总数 47875
作品 0
河西
项目经理
私信 提问
Asp.net MVC2中使用Ajax的三种方式

在Asp.net MVC中,我们能非常方便的使用Ajax。这篇文章将介绍三种Ajax使用的方式,分别为原始的Ajax调用、Jquery、Ajax Helper。分别采用这三种方式结合asp.net mvc去实现一个史上最简单的留...

王二狗子11
2018/01/01
0
0
C# MVC提交表单的四种方式(转)

Mvc 提交表单的4种方法全程详解(转) 一,MVC HtmlHelper方法 Html.BeginForm(actionName,controllerName,method,htmlAttributes){} BeginRouteForm 方法 (HtmlHelper, String, Object, For......

天才小龙
2018/01/05
0
0
Asp.Net MVC 使用 Ajax

Asp.Net MVC 使用 Ajax Ajax 简单来说Ajax是一个无需重新加载整个网页的情况下,可以更新局部页面或数据的技术(异步的发送接收数据,不会干扰当前页面)。 Ajax工作原理 Ajax使浏览器和服务...

JoeSnail
2017/11/13
0
0
《Pro ASP.NET MVC 3 Framework》学习笔记之三十二 【无入侵的Ajax】

Ajax是Asynchronous JavaScript and XML的缩写,正如我们看到的,XML部分已经不再像过去那样重要,但是异步的部分却让Ajax非常有用。它是一种在后台从服务端请求数据的模型,而不用重新加载网...

mszhangxuefei
2012/06/01
0
0
自学MVC看这里——全网最全ASP.NET MVC 教程汇总

MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC。小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口。本文从Why,W...

葡萄城控件技术团队
2016/08/18
492
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部