nopcommerce笔记:视图中按钮与后台action的对应关系

来源:互联网 发布:mac磁盘工具 编辑:程序博客网 时间:2024/04/28 17:05

视图中按钮与后台程序中的action之间的对应关系分为以下几种:

1、  视图中只有一个submit按钮

这类情况,比如注册、登录等视图。

在注册视图Register.cshtml中定义:

<input type="submit"id="register-button" class="button-1register-next-step-button" value="@T("Account.Register.Button")"name="register-button" />

只有这么一个submit按钮。

在CustomerController.cs中定义了两个函数,分别为:

[NopHttpsRequirement(SslRequirement.Yes)]

public ActionResult Register()

{

}

 

[HttpPost]

[CaptchaValidator]

[ValidateAntiForgeryToken]

public ActionResult Register(RegisterModel model, stringreturnUrl, bool captchaValid)

{

}

 

第一个函数对应着视图Register.cshtml;第二个函数对应按下submit按钮之后的处理函数。

像这类情况,一般是两个函数同名,第一个函数不带参数,其对应视图,并给model的成员赋值;第二个函数必须带有[HttpPost],然后对获取到的model中的值进行处理。

2、  视图中有多个submit按钮

我最近在程序中用到了多个submit按钮的视图,将它们定义为:

<input type="submit" name="handle-one"class="t-button" value="@T("处理一")"/>

<input type="submit" name="handle-two"class="t-button" value="@T("处理二")"/>

 

后台cs文件中定义了下面几个函数:

public ActionResult OrdersHandleList()

{

}

 

[HttpPost, ActionName("OrdersHandleList")]

[FormValueRequired("handle-one")]

public ActionResult OrdersHandleOne(OrderHandleModel model)

{

}

 

[HttpPost, ActionName("OrdersHandleList")]

[FormValueRequired("handle-two")]

public ActionResult OrdersHandleTwo(OrderHandleModel model)

{

}

 

第一个函数对应着视图OrdersHandleList.cshtml;第二个函数对应按下submit handle-one按钮之后的处理函数,第三个函数对应按下submit handle-two按钮之后的处理函数。

像这类情况,几个函数名都可以不同,第一个函数不带参数,其对应视图,并给model的成员赋值;第二个函数必须带有[HttpPost, ActionName("OrdersHandleList")],其中OrdersHandleList表示其所处的视图所对应的action,[FormValueRequired("handle-one")]中描述的是该函数所对应的submit按钮的名称。第三个函数与第二个类似。

 

3、  使用Html.Telerik().Grid的视图

使用Html.Telerik().Grid的视图一般都分为两部分,上面是一些查询条件和一个查询按钮,下面是一个grid。这种视图中,一般都会使用到grid的Select命令,会给该命令赋一个给grid绑定数据的函数。

如果需要在每一条记录行后面显示“编辑”和“删除”,则需要添加Edit和Delete命令。在Columns中添加下面的语句:

columns.Command(commands=>

{

       commands.Edit().Text(T("Admin.Common.Edit").Text);

       commands.Delete().Text(T("Admin.Common.Delete").Text);

}).Width(180);

这样的话,就需要给Update(Edit包括update和cancel,cancel不需要绑定任何函数)和Delete命令绑定函数。

一般通过下面的语句进行绑定:

.DataBinding(dataBinding=>

{

       dataBinding.Ajax()

            .Select("OrdersList", "Order")

            .Update("OrdersUpdate", "Order")

            .Delete("OrdersDelete", "Order");

})

关于视图中这部分完整的code如下:

<tableclass="adminContent">

        <tr>

            <td>

               @(Html.Telerik().Grid<OrderPaymentModel>()

                        .Name("orders-grid")

                        .ClientEvents(events=> events

                            .OnDataBinding("onDataBinding")

                            .OnDataBound("onDataBound"))

                        .DataKeys(x =>

                        {

                            x.Add(y =>y.Id).RouteKey("Id");

                        })

                       .DataBinding(dataBinding =>

                        {

                            dataBinding.Ajax()

                                .Select("OrdersList","Order")

                                .Update("OrdersUpdate","Order")

                                .Delete("OrdersDelete","Order");

                        })

                        .Columns(columns =>

                        {

                            columns.Bound(x=> x.Id)

                            .ClientTemplate("<input type='checkbox' name='checkedRecords' value='<#= Id#>' class='checkboxGroups'/>")

                            .Title("<input id='mastercheckbox' type='checkbox'/>")

                            .Width(50)

                            .HtmlAttributes(new{ style ="text-align:center" })

                           .HeaderHtmlAttributes(new{ style ="text-align:center" });

 

                            columns.Bound(x=> x.Id);

                            columns.Bound(x=> x.Email);

                            columns.Bound(x=> x.StartDateTimeUtc);

                            columns.Bound(x=> x.EndDateTimeUtc);

                            columns.Bound(x=> x.CurrentAmount);

                            columns.Bound(x=> x.TotalAmount);                           

                            columns.Command(commands=>

                            {

                               commands.Edit().Text(T("Admin.Common.Edit").Text);

                               commands.Delete().Text(T("Admin.Common.Delete").Text);

                            }).Width(180);

                        })

                        .Pageable(settings=> settings.PageSize(gridPageSize).Position(GridPagerPosition.Both))                                 

                        .EnableCustomBinding(true))

            </td>

        </tr>

    </table>

 

在cs文件中,我们有如下几个函数:

public ActionResult OrdersList()

{

}

 

[GridAction(EnableCustomBinding = true)]

public ActionResult OrdersList (GridCommand command,OrderModel model)

{

}

 

[GridAction(EnableCustomBinding = true)]

public ActionResult OrderUpdate(GridCommand command,OrderModel model)

{

}

 

[GridAction(EnableCustomBinding = true)]

public ActionResult OrderDelete(GridCommand command,OrderModel model)

{

}

 

第一个函数对应着视图OrdersList.cshtml;第二个函数负责为grid绑定数据;第三个函数是点击Update按钮时执行;第四个函数是点击Delete按钮时执行。后三个函数必须带着[GridAction(EnableCustomBinding = true)],与视图中的.EnableCustomBinding(true)对应;另外,它们的参数都是(GridCommand command, OrderModel model)。
0 0
原创粉丝点击