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

前端之家收集整理的这篇文章主要介绍了在MVC下如何使用ajax实现表单内容的管理-二前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

1、模块文件列表管理:

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

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

publicclassAdminModuleModel
{
///<summary>序号</summary>
[required]
[Display(Name="序号")]
publicintID{get;set;}
///<summary>网站序号</summary>
[required]
[Display(Name="网站序号")]
publicintSiteIdx{get;set;}
///<summary>模块名称</summary>
[Display(Name="模块名称")]
publicstringModuleName{get;set;}
///<summary>版本信息</summary>
[Display(Name="版本信息")]
publicstringVersion{get;set;}
///<summary>作者</summary>
[Display(Name="作者")]
publicstringAuthor{get;set;}
///<summary>版权所有</summary>
[Display(Name="指定配置项")]
publicstringOwner{get;set;}
///<summary>版权说明</summary>
[Display(Name="版权说明")]
publicstringCopyright{get;set;}
///<summary>有效期</summary>
[Display(Name="有效期")]
publicDateTimeAvailDate{get;set;}
///<summary>说明</summary>
[Display(Name="说明")]
publicstringNote{get;set;}
}
publicclassAdminModulesqlModel:AdminModuleModel
{
///<summary>创建或升级sql</summary>
[Display(Name="创建或升级sql")]
publicstringInitsql{get;set;}
///<summary>删除sql</summary>
[Display(Name="删除sql")]
publicstringDelsql{get;set;}
}

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

下面我们给出Controller的代码

publicActionResultModuleDetails(intid)
{
AdminModulesqlModelmodel=newAdminModulesqlModel();
ModuleCtrlctrl=newModuleCtrl(null);
ModuleInfoinfo=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=(newModuleFileCtrl(null)).ListByModuleFile((int)id);
returnView(model);
}

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

@modelVonPortal.Web.Models.AdminModulesqlModel
@{
ViewBag.Title="Details";
Layout="~/Views/Shared/_Admin.cshtml";
}
@sectionHeadScript{
<scriptsrc="/Scripts/jquery.form.js"type="text/javascript"></script>
}
<h2>Details</h2>
<div>
<h4>模块信息</h4>
<hr/>
<dlclass="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>
<tableclass="table"id="moduleFiles">
<tr>
<th>文件序号</th>
<th>文件名称</th>
<th>文件类型</th>
<th>文件目录</th>
<th></th>
</tr>
@foreach(VonPortal.Web.Models.ModuleFileInfofileinViewBag.ModuleFiles)
{
<tr>
<td>
@(file.ID.ToString())
</td>
<td>
@(file.Filename)
</td>
<td>
@(file.FileExt)
</td>
<td>
@(file.FilePath)
</td>
<td>
<inputtype="button"value="删除"id="ModuleFileDelete"data-bind="@(file.ID)"/>
</td>
</tr>
}
</table>
</div>

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

@modelVonPortal.Web.Models.AdminModulesqlModel
@{
ViewBag.Title="Details";
Layout="~/Views/Shared/_Admin.cshtml";
}
<h2>Details</h2>
<div>
<h4>模块信息</h4>
<hr/>
<dlclass="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>
<tableclass="table"id="moduleFiles">
<tr>
<th>文件序号</th>
<th>文件名称</th>
<th>文件类型</th>
<th>文件目录</th>
<th></th>
</tr>
@foreach(VonPortal.Web.Models.ModuleFileInfofileinViewBag.ModuleFiles)
{
<tr>
<td>
@(file.ID.ToString())
</td>
<td>
@(file.Filename)
</td>
<td>
@(file.FileExt)
</td>
<td>
@(file.FilePath)
</td>
<td>
<inputtype="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()
<divclass="form-group">
@Html.LabelFor(model=>model.Initsql,htmlAttributes:new{@class="control-labelcol-md-2"})
<divclass="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>
<divclass="form-group">
@Html.LabelFor(model=>model.Delsql,htmlAttributes:new{@class="control-labelcol-md-2"})
<divclass="col-md-10">
@Html.TextAreaFor(model=>model.Delsql,@style="margin:0px;width:100%;height:103px;"})
@Html.ValidationMessageFor(model=>model.Delsql,new{@class="text-danger"})
</div>
</div>
<divclass="form-group">
<divclass="col-md-offset-2col-md-10">
<inputtype="submit"value="执行"class="btnbtn-primary"/>
</div>
</div>
}
</div>

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

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

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

[HttpPost]
[ValidateAntiForgeryToken]
publicasyncTask<ActionResult>ModuleDetails(AdminModulesqlModelmodel)
{
ModuleTasktask=newModuleTask(null);
stringOrgInitsql=awaittask.GetInitsql(model.ID);
//Initsql每次修改后都将被执行,这就意味着每次都是新增或调整用的sql,故每次执行的sql自动完成叠加存储,这样就可以保存为最完整的执行过程,以便今后重建执行。
awaittask.SetInitsql(model.ID,OrgInitsql+"\r\n"+model.Initsql);
awaittask.SetDelsql(model.ID,model.Delsql);
VonCfgSectionsct=VonCfgSectionGroup.GetSectionParams("VonPortal/"+model.Owner);
stringconnName=(string)sct[sct.DefaultProvider[0]].Params["connectionName"];
//执行model.Initsql语句,略...。
returnRedirectToAction("ModuleList");//返回模块列表,不在本文的讨论范围。
}

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

原文链接:https://www.f2er.com/ajax/162271.html

猜你在找的Ajax相关文章