当前位置:编程学习 > 网站相关 >>

CMS:文章管理之视图(4)

现在来完成分类的编辑操作。原来是想用模型加载数据的,但现在想想,用表单加载会方便些。

切换到文章管理的控制器,添加onCategoryEdit方法,利用表单来加载数据,代码如下:

onCategoryEdit:function () {

    var me = this,

        tree =me.view.down("treepanel"),

        rs =tree.getSelectionModel().getSelection();

    if (rs.length > 0) {

        rs = rs[0];

        if (rs.data.id > 10000) {

            var win =SimpleCMS.view.Content.CategoryEdit;

            win.form.getForm().url ="/Category/Edit";

            win.setTitle("编辑文章类别");

            win.form.load({

                url:"Category/Details",

                params: { id: rs.data.id },

                success: function (form,action) {

                    this.show();

                },

                failure:SimpleCMS.FormSubmitFailure,

                scope: win

            });           

        } else {

            Ext.Msg.alert("信息", "类别“" + rs.data.text + "”不允许编辑。");

        }

    }

},

 

分类id大于10000的才是可以编辑的分类,因而这里要加个判断。设置好分类编辑窗口的的提交地址和标题后,就调用load方法为表单加载数据了。如果成功,就显示窗口。这里要注意作用域的设置,在这里把作用域设置为win了,这样,在success方法内,this指针就指向窗口了。

 

现在切换到Category控制器,完成Details方法。根据书12.5.2节的示例可以知道,在data内返回一个JSON对象就可以了,对象中的关键字就是表单中字段的名字,这相当简单,代码如下:

[AjaxAuthorize(Roles= "普通用户,系统管理员")]

publicJObject Details()

{

    int id=0;

    int.TryParse(Request["id"],outid);

    try

    {

        var q = dc.T_Category.SingleOrDefault(m=> m.CategoryId == id);

        if (q == null)

        {

            returnMyFunction.WriteJObjectResult(false, 0, "分类已被删除或不存在。", null);

        }

        else

        {

 

            return new JObject(

                newJProperty("success",true),

                new JProperty("data",

                    new JObject(

                        newJProperty("CategoryId",q.CategoryId),

                        newJProperty("Content",q.Content),

                        newJProperty("Image",q.Image),

                        newJProperty("Title",q.Title),

                        newJProperty("SortOrder",q.SortOrder),

                        newJProperty("ParentId",q.ParentId==null ? -1 : q.ParentId)

                    )

                )

            );

        }

    }

    catch (Exception e)

    {

        returnMyFunction.WriteJObjectResult(false, 0, e.Message, null);

    }

}

 

这里要注意的是ParentId,为null时,要设置为-1,这样才能对应上是根节点。

现在还不能测试,因为编辑按钮现在还是禁用状态,因而,要监听分类树的selectionchange事件,当有选择了节点且节点id大于10000时启用编辑和删除按钮。切换到文章管理的控制器,先在me.control语句上添加绑定selectionchange的语句,代码如下:

me.view.down("treepanel").on("selectionchange",me.onTreeSelect, me);

 

然后编写onTreeSelect方法,这里要注意setDisabled的赋值,要把id的值考虑进去,代码如下:

onTreeSelect:function (model, sels) {

    var me = this,

        id = 0;

    if (sels.length > 0) {

        id = sels[0].data.id;

    }

   me.getCategoryEdit().setDisabled(sels.length == 0 || id <= 10000);

    me.getCategoryDelete().setDisabled(sels.length== 0 || id <= 10000);

}

 

这里,如果存在选择,则把id值取出来,然后在setDisabled方法内,如果选择记录的长度等于0,说明要禁用按钮,又或者id值小于10000,也要禁用按钮。

 

好了,现在可以单击编辑按钮对分类进行编辑了。

余下的就是完成编辑操作的后台代码了,这个与Add方法区别不大,具体代码如下:

[HttpPost]

[AjaxAuthorize(Roles= "普通用户,系统管理员")]

publicJObject Edit(CategoryModel model)

{

    bool success = false;

    JObject errors = new JObject();

    if (ModelState.IsValid)

    {

        try

        {

            var q =dc.T_Category.SingleOrDefault(m => m.CategoryId == model.CategoryId);

            if (q == null)

&

补充:Web开发 , 其他 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,