• 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;'>描述文字</标签>) 原样输出
  • 相关阅读:
    C# MJPEG 客户端简单实现
    CefSharp 实现多标签页 调用ChromiumWebBrowser的SetAsPopup()后浏览页卡死,的另一种解决方案
    opencv findContours 报错解决记录
    什么叫网关
    分别实现网页播放mp3、flv、wmv、Flash,代码兼容FireFox
    ToString()和Convert.ToString()的用法区别
    asp,asp.net中关于双引号和单引号的用法
    .NET中继承和多态深入剖析(上)
    ASP.NET中不常用的另类绑定方法<%$ %>
    C#日期函数所有样式大全
  • 原文地址:https://www.cnblogs.com/jinhaoObject/p/4597133.html
Copyright © 2020-2023  润新知