我们下面对模块中的文件管理进行讲解:
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的初始化,以及内容的更新操作。
[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