一直走,一直走……

MVC+C#+DevExpress

主要是总结最近写过的代码和用过的工具。

  1. MVC
  2. C#
  3. DevExpress(gridview)

1. MVC

这里的MVC,特指ASP.net MVC

  1. Model:一组类,描述一组要处理的数据和处理规则,也就是操作对象;
  2. View:定义显示给用户的程序界面;
  3. Controller:一组类,响应用户的输入,读取Model中的数据,将对应的View返回给用户。

参考:

[1]《ASP.NET MVC5 高级编程 第五版》

[2] 快速了解mvchttps://www.asp.net/mvc/overview/getting-started/introduction/adding-a-view

1.1 MVC中Razor的语法

关键是@

参考:

[1] https://www.asp.net/web-pages/overview/getting-started/introducing-razor-syntax-c

1.2 viewdata

在controller和view之间传递数据

1.2 gethtml和render的用法

在Razor Views中使用DevExpress插件会用到。

You can declare DevExpress extensions within View pages by using either expression syntax (@ or @()) or code block syntax (@{}). (参考[在view中使用DevExpres][1])

参考:

[1]:Using Extensions in Razor Views

[2] https://www.devexpress.com/Support/Center/Question/Details/Q388623

1.3 Html.RenderPartial和Html.Partial

Partial辅助方法用于将部分视图渲染成字符串。

RenderPartial辅助方法与partial非常相似,但RenderPartial不是返回字符串,而是直接写入响应输出流。因此,必须把RenderPartial放入代码块中,而不能放在代码表达式中。

以下是用法的不同:

@{ Html.RenderPartial(“test”); }

@Html.Partial(“test”);

一般而言,选择partial,因为partial更方便,不需要大括号(参考书给出这样的解释也是醉了),另外RenderPartial效率高(何以见得?)。

Html.Action和Html.RendRenderAction的区别:

Html.Action:执行单独的控制器操作,将控件嵌入到View中;

Html.RendRenderAction:调用Controller中的Action方法,并将返回的结果直接显示在当前调用的view中。

参考:

[1] ASP.NET MVC5高级编程(第五版)

2. C#部分用法

2.1 泛型

类似于C++中的模板,常用的两种泛型:

  1. List
  2. Dictionary

2.2 反射

表示简单用过,获取一个类中的自定义特性

2.3 Linq(Language Integrated Query)

Linq查询表达式,必须以from子句开头,以select或group子句结束。

参考:

[1] 《C#入门经典 第六版》

[2] 《C#高级编程 第七版》

3. DevExpres

3.1 GridView和FormLayout

GridView使用,可参考官网的demo,DevExpress GridView的使用demo

GridView自带默认的表格显示方式

  1. 在controller中设置GridView的显示效果。
1
2
3
4
5
6
7
8
9
10
public override GridViewSettings GetGridViewSettings(HtmlHelper helper) {
//设置表格中每一列的显示
settings.Columns.Add(c =>
{
c.FieldName = "name";
c.Caption = "名字";
c.ColumnType = MVCxGridViewColumnType.TextBox;
c.CellStyle.HorizontalAlign = HorizontalAlign.Center;
});
}
  1. 在对应的View的cshtml文件中,使用FormLayout,设置添加、编辑时的显示效果。
1
2
3
4
5
6
7
8
9
@{Html.DevExpress().FormLayout(formLayoutSettings => {
formLayoutSettings.Items.Add(itemSettings =>
{
itemSettings.Caption = "名字";
itemSettings.FieldName = "name";
itemSettings.NestedExtensionType = FormLayoutNestedExtensionItemType.TextBox;
TextBoxSettings textBoxSettings = (TextBoxSettings)itemSettings.NestedExtensionSettings;
});
}
  1. GridView常用的几个方法

    新增行: grid.AddNewRow();

    获取行索引:grid.GetFocusedRowIndex();

    编辑行: grid.StartEditRow(index);

    获取行主键:grid.GetRowKey(grid.GetFocusedRowIndex());

    参考:http://www.cnblogs.com/allenlf/p/4171189.html

  2. 删除等操作执行后,用户可以看到反馈。

    ASPxGridView1.JSProperties.Remove(“cpMsg”);

    ASPxGridView1.JSProperties.Add(“cpMsg”, “删除成功”);

    注意:按Dev控件约定,此处添加JSProperties,只能以 cp为前缀。(再补充)

3.2 callback方法的使用

不局限于GridView,任何带有callback方法的控件,比如callbackpanel、comboBox等。

首先,callback什么时候用。

一个是高效显示或者更新控件内容(减少初始化时传递的数据),一个是执行需要较长时间的操作(如文件上传等)。

其次,callback怎么用。

一个控件以callback模式使用的要求:

  1. 这个控件定义在一个独立的部分视图中;
  2. 一个controller中定义一个方法处理该控件的callback,并返回一个包含该控件的部分视图,这样可以根据终端用户的不同操作改变控件提供的内容;
  3. Callback的执行路径应该用callbackroutes来定义,这个属性允许为该控件指定对应的controller和action。

参考:

[1] callbacks简介 https://documentation.devexpress.com/#AspNet/CustomDocument9052

[2] callbacks传递参数 https://documentation.devexpress.com/#AspNet/CustomDocument9941

[3] callbackpanel的使用 https://documentation.devexpress.com/#AspNet/CustomDocument9000

3.3 clientsideevents事件

控件自带客户端事件,比如combobox、textbox等都有,提供对用户操作的支持。

  1. 注册事件;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Html.DevExpress().Menu(
    settings =>
    {
    settings.Name = "menu1";
    settings.EnableClientSideAPI = true;
    settings.Items.Add("Visa");
    settings.Items.Add("MasterCard");
    settings.ClientSideEvents.ItemClick = "MenuItemClick";
    }).GetHtml()
  2. 用js方法来响应用户注册的事件;

    1
    2
    3
    4
    5
        <script type="text/javascript">
            function MenuItemClick(s, e) {
                textBox1.SetText(e.item.GetText());
            } 
    </script>

    js方法中两个参数,s是注册该事件的控件,e是该事件的参数。

  3. 控件的ClientInstanceName,这样就可以在前端操作对应的dev控件;

参考:

[1] https://documentation.devexpress.com/#AspNet/CustomDocument9150

[2] https://documentation.devexpress.com/#AspNet/CustomDocument9448