MVC实用笔记

----------------------------

渲染一个Action:@{Html.RenderAction("Rulelist", "AjaxReuqestData",new { area = "AjaxTest" });}

public ActionResult Rulelist()
{
List<HomeRuleList> homeRuleLists = GetHomeRuleLists();
return PartialView(homeRuleLists);
}

@using MyLoveApp.Models
@model List<HomeRuleList> //MODEL

----------------------------------------

url.Action的使用:注意加''号

$.ajax({
url: '@Url.Action("Rulelist", "AjaxReuqestData", new { area="AjaxTest"})',
type: "Post",
success:function(data){
$("#content").html(data);
}
});

------------------------------------

js触发一个事件()

trigger()方法触发事件后,会执行浏览器默认操作。例如:

$("input").trigger("focus");

以上代码不仅会触发为<input>元素绑定的focus事件,也会使<input>元素本身得到焦点(这是浏览器的默认操作)。

如果只想触发绑定的focus事件,而不想执行浏览器默认操作,可以使用jQuery中另一个类似的方法——triggerHandler()方法

$("input").triggerHandler("focus");

$("h2").click(function () {
$("h1").trigger("click");
});

-----------------------

经常传值类型:ViewBag,ViewData,TempData他们都可以存对象    ViewData[key] as Type  可以强类型转换

经常赋予值类型:model,string,Dictionary<T,type>,list<T>

ViewBag和ViewData生命周期相同,仅对当前View有效

TempData保存在Session中,Controller每次执行请求的时候,会从Session中先获取TempData,而后清除Session,获取完TempData数据,虽然保存在内部字典对象中,但是其集合中的每个条目访问一次后就从字典表中删除。

具体代码层面,TempData获取过程是通过SessionStateTempDataProvider.LoadTempData方法从ControllerContext的Session中读取数据,而后清除Session,故TempData只能跨Controller传递一次。

如果我们想读取TempData的值但是又不让它被删除,可以使用TempData.Peek("Key")方法。如果想再保持一次TempData里面的值,可以使用TempData.Keep("Key").

TempData: 保存在session中,controller每次执行请求时,会从Session中获取Tempdata(),而后清除session,

获取完TempData数据,虽然保存在内部字典中。但字典中每个条目访问一次后就从字典中删除。因此Tempdata数据最多只能经过一次controller传递,并且每个元素最多只能访问一次。之后自动删除

  • ViewData和TempData是字典类型,赋值方式用字典方式, ViewData["myName"]
  • ViewBag是动态类型,使用时直接添加属性赋值即可 ViewBag.myName。
  • ViewBag和ViewData只在当前Action中有效,等同于View
  • TempData可以通过转向继续使用,因为它的值保存在Session中。
  • 但TempData只能经过一次传递,之后会被系统自动清除.
  • ViewData和ViewBag 中的值可以互相访问,因为ViewBag的实现中包含了ViewData

------------------------------------------

html.helper:

@Html.EditorFor(model => model.Time)编辑框
 @Html.ValidationMessageFor(model => model.Time)验证合法性错误显示

@Html.LabelFor(model => model.Time)标签

@Html.ValidationSummary(true)}用于客户端验证

@Html.DisplayFor(modelItem => item.Title)是显示列的内容

@Html.DisplayNameFor(model => model.Title)是显示列名,

-----------------------------------------------

Ajax.helper:

@Ajax.ActionLink("Ajax渲染页面", "Rulelist","AjaxReuqestData", new { area="AjaxTest",date=DateTime.Now.ToString()}, new AjaxOptions { HttpMethod = "Post",
InsertionMode=InsertionMode.Replace,UpdateTargetId="content2"}) 回传到当前页面的一个div

如果需要ajax回传的数据必须及时更新,那么就必须调整你的Action方法定义,新增一个OutputCache属性,强迫浏览器不要缓存这一页的要求

[OutputCache(NoStore = true, Duration = 0)]
public ActionResult Rulelist()
{
List<HomeRuleList> homeRuleLists = GetHomeRuleLists();
return PartialView(homeRuleLists);
}

表单

@using(Ajax.BeginForm(new AjaxOptions{ UpdateTargetId="now"}))

 

实例:
@Ajax.ActionLink("删除数据",“GetTime”,new {controller="Home",id=3,new AjaxOptions{OnSuccess="Delete" ,Confirm="您确定要删除吗?", HttpMethod="POST",LoadingElementId="ajaxLoad"}})
 
@Ajax.ActionLink执行流程
1,用户单点击超链接
2,对超链接上的href属性定义的Action网址发出HTTP要求
3,取回内容后再将内容填入AjaxOptions物件的UpdateTargetId属性所指定的id元素中
 
@Ajax.BeginForm执行流程
1,用户送出表单
2,对表单元素上的action属性的Action网址发出http要求,并将表单所有数据传过去,
3,取回内容后再将内容填入ajaxOptions物件的UpdateTargetId属性所指定的id元素中。
了解AjaxOptions类型
无论使用Ajax.ActionLink 或者Ajax.BeginForm,都需要传入AjaxOptions的物件当参数,这个参数将决定asp.net mvc的ajax如何运作。
AjaxOptions属性名称
Confirm执行ajax之前会跳出一个确认对话框
HttpMethod设定http的设定方法
InsertionMode设定通过Ajax的辅助方法取回数据时,要如何将数据新增至UpfateTargetId(缩写为UTI)指定的元素中,有以下三种:
InsertionMOde.Replace:取代UTI的内容(预设)
InsertionMOde.InsertBefore:在UTI之前插入
InsertionMOde.InsertAfter 在UTI之后插入
 
LoadingElementId 在ajax尚未完成所有工作前显示的元素id值
 
OnBegin设定开始时要执行的js函数名称
 
OnComplete设定结束时要执行的js函数名称
 
OnFailure设定失败时执行的
 
OnSuccess 设定完成时要执行的js函数名称
 
UpdateTargetId设定回传值要显示在哪一个id上
 
URL 设定ajax的请求网址
 
当使用OnBegin,OnComplete,OnFailure,OnSuccess 这四个属性时,如果指定的函数名称不存在网页中,就会发生js错误
 
--------------------------------------------
URL辅助方法:
输出当前控制器下名称为About的Action
@Url.Action("About");
/Home/About
输出当前控制器下名称为About的Action 并且带有参数id
@Url.Action("About",new {id=1})
/Home/About/1
输出指定控制器下名称为About的Action
@Url.Action("About","Home")
/Home/About
输出指定控制器下名称为About的Action并带有参数
@Url.Action("About","Home",new {PageNo=1})
/Home/About?PageNo=1
路由方法
@Url.RouteUrl("路由名称",new {id=123})
/root/Home/HelperSample/123
@Url.RouteUrl("路由名称",new {id=123},"https")
https://localhost/root/Home/HelperSample/123
静态文档方法
除了上面两种方式之外,mvc还提供一个Url.Content辅助方法,可以用来产生网站里静态档案的路径
假如我们需要/Images/Logo.png这个图档的地址
则@Url.Content("~/images/Logo.png")
 
@Url.Encode("我是谁")
 
@foreach(var item in Model){
<标签tr>
<标签td>@item.Name</标签td>
<标签td>@ShowPrice(item.Price)</标签td> 调用方法
</标签tr>
}
@helper ShowPrice(int price){
if(price==0){
@:免费
}else{
@price
}
}
 @: 免费  输出文字
 
@helper辅助方法
其实声明@helper辅助方法的语法与在c#中声明方法的方式非常像,唯一的差别在于不用回传任何类型,预设就是网页输出。如果要将这个@helper辅助方法用于多个不同的view页面里,可以考虑独立出来放在专案根目录app_code下,这个独立的文件后缀必须为cshtml,做法:先添加一个app_code文件夹,再在添加--》新建项--》MVC4布局页 这一项 并命名为UIHelper.cshtml(可取其他名)
这时就可以把刚下好的@helper 原封不动的移到这个文件里,最后当我们再调用的时候改成@UIHelper.ShowPrice(item.Price)即可
 
 
@Html.Raw(<标签 style='font-size:12px;'>描述文字</标签>) 原样输出
posted @ 2015-06-24 10:57  caijinhao  阅读(239)  评论(0编辑  收藏  举报