在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+"rn"+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");//返回模块列表,不在本文的讨论范围。 } 接下来我们将研究如何实现文件的上传和文件列表的添加。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |