// 一、 页面链接构造
//在 View 中生成超级链接有多种方式: /AdminStore/StoreProduct?rd=15
//<a href="@Url.Action("StoreProduct", "StoreHome", new { rd = "15" })" >到产品页</a>
//@Html.ActionLink("产品页ActionLink", "StoreProduct", new { rd = "15" })
//<%: Html.RouteLink("人员查询", new { controller = "Persons", action = "Query", name = "Bob" })%>
//在 Action 中,可以使用 RedirectTo 来调转至新的页面:
//return RedirectToAction("Query", "Persons", new { name = "Bob" });
//return RedirectToRoute(new { controller = "Persons", action = "Query", name = "Bob" });
//二、 页面与用户控件、数据调用
//1.RenderPatial的数据来自于调用的View,而RenderAction调用时同时赋值。
//2.RenderAction会发起一个新的Request,而RenderPatial不会。
//Html.RenderPartial("YourPartialView", YourData);
//YourData是一个可选的参数
//Html.RenderAction("Show", "Tag");
//三、嵌套 母版
//@RenderBody() 这个方法不需要参数,而且只能出现一次。
//@RenderPage(“~/Views/Shared/_Header.cshtml”) 直接调用公用文件
//@RenderSection(“footer”, false) @section footer { Footer Here } false指的是可以为空
//四、Root路由规则
// 1、Action或者Controller 任何一个不设定规则匹配及对应到实际类中都无法访问
// 如 /{controller}/{action}/ 实际 /StoreHome/NewsAdd/ ,则 StoreHome在 VIEW中必须对应StoreHome文件夹
// NewsAdd 在VIEW中要有NewsAdd.cshtml,在StoreHome中要有 public ActionResult NewsAdd() { return View();}
//五、页面传值 ViewBag ViewData TempData
// ViewBag其实本质就是ViewData,只是多了层Dynamic控制。所以,使用何种方式完全取决于你个人的爱好。
//TempData: 保存在session中,controller每次执行请求时,会从Session中获取Tempdata(),而后清除session,
//获取完TempData数据,虽然保存在内部字典中。但字典中每个条目访问一次后就从字典中删除。因此Tempdata数据最多只能经过一次controller传递,并且每个元素最多只能访问一次。
//添加编辑一个页面时用 @Html.HiddenFor(model => model.NewsID) 隐藏即可
//六、@Html.Raw('<font color='red'>红字</font>'),就会显示出红色的”红字“;
// MvcHtmlString 控制层直接返回HTML代码
//七、交互操作 Modalview:就是会弹出一个view,你只能在该view上操作,而不能切换到其他view,除非你关闭了modalview.
//ModalView("ModalCancelAdmin", "@(res.CancelManagement)", "@(res.Confirm)");
//八、清楚缓存 OutputCache [OutputCache(Duration=10,Location=OutputCacheLocation.ServerAndClient)]
//VaryByParam,http://localhost:7673/StoreAdmin/StoreMemberListid=1 户请求的参数来决定是否读取缓存。这个参数主要指的就是QueryString 我们希望不要读取缓存,因为参数不一样了。要实现这样的需求,也就是说,希望根据name参数的不同缓存不同的数据。则可以设置VaryByParam="id"。
//如果有多个参数的话,可以用逗号分开他们。例如 VaryByParam=”name,Id”
// VaryByHeader,可以根据用户请求中所提供的一些Header信息不同而决定是否读取缓存。
//VaryByContentEncoding,一般设置为Accept-Encoding里面可能的Encoding名称,从上图也可以看出,Request里面是包含这个标头的。
//VaryByCustom,则是一个完全可以定制的设置,例如我们可能需要根据用户角色来决定不同的缓存版本,或者根据浏览器的一些小版本号来区分不同的缓存版本,我们可以这样设置:VaryByCustom=”Role,BrowserVersion”,这些名称是你自己定义的,光这样写当然是没有用的,我们还需要在Global.asax文件中,添加一个特殊的方法,来针对这种特殊的需求进行处理。
//九、路由参数的获取
//1、@this.ViewContext.RouteData.Values["subdomain"] 从页面获取路由的值
//2、RouteData.Values["subdomain"].ToString(); 从controller 获取路由的值
//3、自定义类里获取路由的值
//4、HttpContextBase httpContext = new HttpContextWrapper(HttpContext.Current);
// RouteData rd = RouteTable.Routes.GetRouteData(httpContext);
// return rd.Values["action"].ToString();