MVC 捋一遍(2)

EF 三种编程方式

Database First,Model First和Code First,我们采用的是code first.

users = db.SysUsers.Where(u => u.UserName == "Tom");和

var sysUser = db.SysUsers.FirstOrDefault(u => u.UserName == "Tom");

同为查找,可能返回的值不同吧(自我认为)FirstOrDefault返回的是元素的值,当没查到是返回默认值(null),没有默认值就返回0

Repository Pattern是一种设计模式,这个概念大家肯定经常听到。

"企业架构模式" 上的定义:

Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects.

在域和数据映射层之间使用类似于接口的接口访问域对象。

Bootstrap是Twitter推出的一个开源的用于前端开发的工具包。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。

@Html.ActionLink("linkText", "actionName")

这种重载的第一个参数是该链接要显示的文字,第二个参数是对应的控制器的方法(Action),默认控制器为当前页面对应的控制器。

@Html.ActionLink("linkText", "actionName", "controllerName")

该重载比第一个重载多了一个参数,他指定了控制器的名称。

例如,@Html.ActionLink("detail", "Detail", "Products")会生成<a href="Products/Detail">detail</a>

@Html.ActionLink("linkText", "actionName", routeValues)

相对于上一种重载,该重载新增了routeValue参数,routeValue可以向action传递参数。

例如,@Html.ActionLink("detail", "Detail", new{ id = 1 })会生成<a href="Products/Detail/1">detail</a>

@Html.ActionLink("linkText", "actionName", routeValues, htmlAttributes)

htmlAttribute可以设置<a>标签的属性。

例如,@Html.ActionLink("detail", "Detail", new{ id = 1 }, new{ target = "_blank" })会生成<a href="Products/Detail/1" target="_blank">detail</a>,

需要注意的是如果写成new{ target="_blank", class="className" }则会报错,因为Class是C#的关键字,此时应该写成@class="className"。

html.ActionLink生成一个<a href=".."></a>标记

Url.Action只返回一个url。

@Html.ActionLink("linkText","someaction","somecontroller",new { id = "123" },null)

生成结果:

<a href="/somecontroller/someaction/123">linkText</a>

@Url.Action( "someaction", "somecontroller", new { id = "123" }, null)

生成结果:
/somecontroller/someaction/123

使用布局页的View会自动应用最近文件夹下面的_ViewStart.cshtml.

 

创建分部视图

通过Html.Partial / Html.RenderPartial 使用分部视图(直接调用分部页)

通过Html.Action / Html.RenderAction 使用分部视图(通过controller调用分部页)

[ChildActionOnly] 表示这个Action只应作为子操作进行调用。

也就是说直接通过 controller/action这样的网址是不能访问的,会提示只能由子请求访问的错误。

必须返回一个PartialView

我认为第二种更好一点,可以直接在controller(控制器)里面修改要更换的分部页

XXX和RenderXXX的区别在于,一个是直接返回字符串,另外一个是直接写入到相应输出流,因此不能直接放在代码表达式中,必须放在代码块中。

 

?? 操作符叫做 null-coalescing operator.

这个操作符给可为null的类型定义一个默认值。 (page ?? 1)表示如果page为null返回1,否则返回page的值。

大家直接看下面例子:
int y=x ?? 1; //如果x=null 则y=1,若x!=null ,y=x;

htmlHelper Html.BeginForm()

@using (Html.BeginForm("Index", "Search", @FormMethod.Get, new { id = "mainForm", name = "mainForm",@class="form-inline mainform"}))

Index:操作方法的名称,Search:控制器的名称,@FormMethod.Get:定义from的method的值,

new { id = "mainForm", name = "mainForm",@class="form-inline mainform"}:指定form的id,name,class属性,因class是Razor语法中的关键字所以要用@来标记。

htmlHelper Html.TextBox()

Html.TextBox("Remark", "", new { style = "width:200px;" })

第一个参数为我们为他们取的名字对应id和name,第二个参数则为值,第三个参数则为属性

这个产生的html元素就是<input id="Remark" name="Remark" style="width:200px;" type="text" value="" />

 

htmlHelper Html.PagedListPager

显示最下面的页数、、、(分页)详细如下网址

https://www.cnblogs.com/liuyuanhao/p/4943940.html

 

+++学习中遇到的一些函数和问题

C#中Split用法~

https://www.cnblogs.com/yugen/archive/2010/08/18/1802781.html

用字符串分隔:

using System.Text.RegularExpressions;

string str="aaajsbbbjsccc";
string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);
foreach (string i in sArray) Response.Write(i.ToString() + "<br>");
输出结果:
aaa
bbb
ccc

用多个字符来分隔:
string str="aaajbbbscccjdddseee";
string[] sArray=str.Split(new char[2] {'j','s'});
foreach(string i in sArray) Response.Write(i.ToString() + "<br>");
输出结果:
aaa
bbb
ccc
ddd
eee

用单个字符来分隔:
string str="aaajbbbjccc";
string[] sArray=str.Split('j');
foreach(string i in sArray) Response.Write(i.ToString() + "<br>");
输出结果:
aaa
bbb
ccc

DataRow
//ds是从数据库拿出数据的缓存dataset
DataTable dt = new DataTable();
dt = ds.Tables[0];

DataRow[] dr = new DataRow();//列
dr = dt.Select("MenuFather=0");//这样写是错误的 会提示无法编译
正常写法
DataRow[] dr = dt.Select("MenuFather=0");//列 不能拆开写

posted @ 2017-12-03 20:59  你小子嚣张呀  阅读(192)  评论(0编辑  收藏  举报