zoukankan      html  css  js  c++  java
  • Asp.Net MVC 模型绑定

    通过实现System.Web.Mvc.IModelBinder接口,可以创建一个自定义的模型绑定器。

    public object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext);

    IModelBinder接口定义了一个方法:BindModel,为其提供了两个参数能够用来创建与模型对象。

    通过ControllerContext能够访问控制器类所具有的全部信息,包括客户端请求的细节,

    它具有HttpContext属性,HttpContext又相应地有一个Session属性,该属性能够后去和设置会话。

    ViewData:它返回一个ViewDataDictionary对象,ViewDataDictionary类定义了一些有用的属性,它们提供对视图模型、视图包和视图模型元数据的访问。

    Keys:   为字典中的数据返回键值集合,它们可用来访问视图包属性

    Model :为请求返回视图模型对象

    ModelMetaData 返回一个可以用来反映模型类型的ModelMetadata对象

    ModelState 返回有关模型的状态信息

    在视图中可以直接通过@ViewData 和 @ViewContext.RouteData.Values.Key  访问对应的数据 

    部分视图:

    在主视图中通过  @Html.Partial('MyPartial")调用部分视图 MyPartial

    @Html.Partial("MyPartial",new []{})   即@Html.Partial("部分视图名","部分视图模型实例")

    子动作:

    子动作与动作之间的关系如同部分视图与视图之间的关系

    子动作典型地与部分视图相关联,但这不是必须的。

    @Html.Action("子动作","控制器")

    辅助器方法

    内联辅助器 @helper mymethod(param){}  即在试图中定义方法供调用,内而使视图难以阅读。

    联辅助器是方便的,但是它只能在声明它们的视图之中使用,而且,如果内联辅助器太复杂可能会占据视图而使视图难以阅读。

    外部辅助器

    外部方法其实就是辅助器的扩展方法

    如:

    using System.Web.MVC;

    public static MvcHtmlString ListArrayItems(this HtmlHelper html, string[] list)
    {
    TagBuilder tag = new TagBuilder("ul");
    foreach (string str in list)
    {
    TagBuilder itemTag = new TagBuilder("li");
    itemTag.SetInnerText(str);
    tag.InnerHtml += itemTag.ToString();
    }
    return new MvcHtmlString(tag.ToString());
    }

    调用 @Html.<Helper>  其中<helper>是扩展方法的名称,如@Html.ListArrayItems(list);

    BeginForm辅助器方法的重载

    BeginForm() 创建一个表单,回递给源动作方法(源动作方法指引发渲染该表单的动作方法)

    BeginForm(action,controller)创建一个表单,回递给以字符串形式指定的动作方法和控制器

    BeginForm(action,controller,method)指定form元素中method标签属性的值

    BeginForm(action,controller,method,attributes)为form元素的标签属性指定一个对象,该对象的属性作为标签属性的名称

    BeginForm(action,controller,routeValues,method,attributes)能够为应用程序路由配置中的路由片段变量指定一个值,这个值作为一个对象,该对象的属性对应于路由变量。 

    基本的Input Html辅助器元素

    Check box  @Html.CheckBox("myCheckBox",false)  <input id="myCheckBox" type="checkbox" value="false" />

    Hidden field  @Html.Hidden("myHidden","val") 

    Radio button @Html.RadioButton("myRadioButton","val",true)

    Url和Ajax辅助器方法

    渲染Urls的Html辅助器

    相对于应用程序的URL Url.Content("/Content/Site.css")   /Contetn/Site.css

    链接到指定的动作/控制器 @Html.ActionLink("My Link","Index","Home")  <a href="/">My Link</a>

    动作Url Url.Action("GetPeople",People")    People/GetPeople

    使用路由数据的Url  Url.RouteUrl(new {controller="People",action="GetPeople"})  /People/GetPeople

    使用路由数据的链接  @Html.RouteLink("My Link",new {controller="People",action="GetPeople"}) <a href="/People/Getpeople">My Link</a> 

    链接到指定的路由 @Html.RouteLink("My Link","FormRoute",new {controller="People",action="GetPople"}  输出同上,使用路由配置FormRoute

     @using(Ajax.BeginForm("GetPeopleData",new AjaxOptions{ UpdateTargetId="tableBody"})

    MVC框架支持Ajax表单的核心在于Ajax.BeginForm辅助器方法,它可以接受一个AjaxOptions对象作为其参数。

    AjaxOptions属性

    Confirm 在形成Ajax请求之前,设置显示给用户的确认窗口中的消息

    HttpMethod 设置用来形成请求的Http方法-必须是Get或Post

    InsertionModel指定从服务器接受的内容以何种方式插入到Html。三种选择被表示成InsertionModel枚举值中的值:InsertAfter、InsertBefore、和Replace(默认值)

    LoadingElementId 指定Html元素的ID,这是执行Ajax请求期间要显示的Html元素

    LoadingElementDuration 指定动画的持续时间,用于显露由LoadingElementId指定的元素

    UpdateTargetId 设置Html元素的ID,从服务器接收的内容将被插入到该元素中

    Url设置所请求的服务器Url

     AjaxOptions回调属性

    属性                    jQuery(javascript)事件             描述

    OnBegin            beforeSend                              在发送请求之前立即调用

    OnComplete     complete                                   请求成功时调用

    OnFailure         error                                          请求失败时调用

    OnSuccess      success                                    请求完成时调用,不管请求时成功还是失败

    用过jQuery  ajax调用的都知道,这些事件不过是对匿名方法的封装:

    $.ajax{

    type:"post",

    url:"",

    data:{},

    success:function(data){},

    error:function(request,error){}

    }

    对JSON的支持

    public JsonResult GetJsonData()

    {

      return Json(data,JsonRequestBehavior.AllowGet);

    }

    DefaultModelBinder类查找参数数据顺序

    Request.Form    由用户在Html的form表单元素中提供的值

    RouteData.Values 用应用程序路由获得的值

    Request.QueryString 包含在请求Url中的查询字符串部分的数据

    Request.Files 请求中上传的文件  如File()

    DefaultModelBuilder会为id参数查找一下的一个值:

    1.Request.Form["id"]

    2.RouteData.Values["id"]

    3.Request.QueryString["id"]

    4.Rquest.Files["id"]

    只要找到一个值,搜索便停止。

    在依靠默认模型绑定器的情况下,重要的是动作方法参数与寻找的数据属性相匹配。

    注意:模型绑定需要使用的命名空间

    System.ComponentModel;   定义[DisplayName("标题")]  使用方法 @Html.DisplayNameFor(m=>m.FieldName)

    System.ComponentModel.DataAnnnotations;  标记验证 

     @using (Html.BeginForm("DisplaySummary","Home")){}  指定提交数据的目标动作方法

    public ActionResult DisplaySummary([Bind(Prefix ="HomeAddress")] AddressSummary summary)  
    {
    return View(summary);
    }

    通过使用[Bind(Prefix="HomeAddress")]  AddressSumary summary   来给参数summary 增加默认前缀,即出入的类型为HomeAddress.City   HomeAddress.Country

    而过滤掉前缀HomeAddress后的数据结构为AddressSummary类型。

     模型验证

    明确的验证视图   使用ModelState 对象记录验证错误

    生成验证错误摘要  使用Html.ValidationSummary 辅助器

    显示属性级验证错误  使用Html.ValidationMessageFor辅助器方法

    在模型类中定义验证规则 将注解属性运用于模型类属性

    创建自定义验证注解属性 派生ValidationAttribute类

    定义自验证模型  实现IValidationAttribute类

    使用客户端验证 向应用程序添加微软渐进包式验证包

    执行远程验证  定义返回JsonResult的动作方法并为验证属性添加Remote注解属性

    .input-validation-error{border:2px solid #f00;}

    输入框验证错误样式

    .input[type="checkbox"].input-validation-error{} 复选框运用样式

    @Html.ValidationSummary()  验证辅助器 给用户显示了验证错误的摘要。

     模型绑定验证

    [Required(ErrorMessag="")]   注解属性指明,如果用户未提交一个属性的值,便是一个验证错误

    [Range] 例:

    [Range(typeof(bool),"true","true",ErrorMessage ="you must accept the terms")]
    public bool TermsAccepted { get; set; }

    Range注解属性指明可接受值得一个子集。

    内建的验证注解属性

    属性              实例              描述

    Compare   [Compare("MyOtherProperty")]    两个属性必须有同样的值。

    Range       [Range(10,20)] 一个数字值,(或实现IComparable的任何属性类型),必须不超出指定的最小值和最大值。为了指定只有一段的边界,可以用MinValue或MaxValue

    如[Range(int.MinValue,50)]

    RegularExpression       [RegularExpression("parttern")] 一个字符串值,必须匹配指定的正则表达式。默认大小写敏感,可以运用(?i)修饰符,使大小写不敏感 如[RegularExpression("(?i)myparttern")]

    [Required]    [Required(ErrorMessage="")] 必须是一个非空值或一个不是只含空格的字符串,如果你希望空格作为接受值,可以用[Required(AllowEmptyString=true)]

    StringLength  [StringLength(10)]   一个字符串必须不超过指定的最大长度,也可以指定一个最小长度 [StringLength(10,MinimumLength=2)]

    Razor小节定义:

    在布局器中定义如下

    @RenderSection("Scripts",false)  //javascript  即js 部分引用结束

    @RenderSection("Body") //代替@RenderBody() 

    Razor部分代码

    @section Scripts{

    <div></div>

    }

    @section Body{

    }

    1.AjaxOptions ajaxOpts=new AjaxOptions{

    OnSuccess="processResponse"   //当提交成功时触发js方法

    }

    @section Scripts{

    <script type="text/javascript">

    function processResponse(){

    }

    </script>

    }

     @Html.ValidationSummary(true)  //启动客户端验证

    @Html.ValidationMessageFor(m=>m.ClientName)  //验证字段,错误时输出

    <style>

      .field-validation-error{color:#f00;}

    </style>

  • 相关阅读:
    网页制作--标签,表格,表单,框架
    sql数据库小结
    数据库的触发器
    数据库的复制与附加
    sql数据库随笔
    Web窗体--控件
    练习--学生信息录入
    HTML常用数据类型
    javascript-表单验证
    javasc-正则表达式
  • 原文地址:https://www.cnblogs.com/sundh1981/p/13600884.html
Copyright © 2011-2022 走看看