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");//列 不能拆开写