MVC实用笔记
阅读原文时间:2023年07月13日阅读:1

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

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

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

@using MyLoveApp.Models
@model List //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"``);

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

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

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

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

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

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

经常赋予值类型:model,string,Dictionary,list

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 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>@ShowPrice(item.Price) 调用方法

}

@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;'>描述文字) 原样输出

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器