久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    MVC擴展ModelBinder使類型為DateTime的Action參數可以接收日期格式的字符串

     昵稱10504424 2014-06-20

    如何讓視圖通過某種途徑,把符合日期格式的字符串放到路由中,再傳遞給類型為DateTime的控制器方法參數?即string→DateTime。MVC默認的ModelBinder并沒有提供這樣的機制,所以我們要自定義一個ModelBinder。

    首先,在前臺視圖中,把符合日期格式的字符串賦值給date變量放在路由中:

    @Html.ActionLink("傳入日期格式為2014-06-19","Date",new {date = "2014-06-19"})

    控制器方法中,希望這樣接收date這個變量:

    public ActionResult Date(DateTime date)
            {
                ViewData["Date"] = date;
                return View();
            }

    自定義的ModelBinder實現IModelBinder接口:

    復制代碼
    using System;
    using System.Web.Mvc;
    
    namespace MvcApplication1.Extension
    {
        public class DateTimeModelBinder : IModelBinder
        {
            public string Format { get; private set; }
    
            public DateTimeModelBinder(string format)
            {
                this.Format = format;
            }
    
            public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
            {
                //從ValueProvider中,模型名稱為key,獲取該模型的值
                var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
                return DateTime.ParseExact((string)value.AttemptedValue, this.Format, null);
            }
        }
    }
    復制代碼

    以上,通過構造函數注入格式,通過屬性使用格式,在BindModel()方法中取出ValueProvider中的值,再轉換成DateTime類型。

    接下來的問題是:DateTime date如何才能用上自定義的ModelBinder呢?為此,我們需要一個派生于CustomModelBinderAttribute的類,重寫CustomModelBinderAttribute的GetBinder()方法。

    復制代碼
    using System.Web.Mvc;
    
    namespace MvcApplication1.Extension
    {
        public class DateTimeAttribute : CustomModelBinderAttribute
        {
            public string Format { get; private set; }
    
            public DateTimeAttribute(string format)
            {
                this.Format = format;
            }
    
            public override IModelBinder GetBinder()
            {
                return new DateTimeModelBinder(this.Format);
            }
        }
    }
    復制代碼

    再把DateTimeAttribute打到控制器方法參數上:

    public ActionResult Date([DateTime("yyyy-MM-dd")]DateTime date)
            {
                ViewData["Date"] = date;
                return View();
            }

    于是,最終可以在視圖中這樣使用從控制器方法傳來的、放在ViewData中DateTime類型:

    @{
        var date = (DateTime) ViewData["Date"];
    }
    
    <span>接收到的日期是:</span>
    <span>@date.ToShortDateString()</span>

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 美女乱子伦高潮在线观看完整片| 最近中文字幕日韩有码| 亚洲AV永久无码精品三区在线| 精品无码国产污污污免费| 少妇粗大进出白浆嘿嘿视频| 日韩在线视频观看免费网站| 免费观看的AV毛片的网站| 国产福利深夜在线观看| 日韩AV无码精品一二三区| 日韩人妻无码精品久久| 成人三级视频在线观看不卡| 老熟妇高潮一区二区三区| 亚洲国产良家在线观看| 宝贝扒开下面自慰给我看| 色爱综合激情五月激情| 国产成人亚洲精品| 国产精品普通话国语对白露脸 | 亚洲 欧美 国产 制服 动漫| 少妇人妻偷人精品免费| 成在线人永久免费视频播放| 国产高清在线不卡一区| 国产女人高潮视频在线观看| 国产久免费热视频在线观看| 久久国产加勒比精品无码| 潮喷失禁大喷水无码| 亚洲高清无在码在线电影不卡| 韩国三级在线 中文字幕 无码| 99久久99精品久久久久久| 成人精品天堂一区二区三区| 欧美变态另类zozo| 午夜三级A三级三点在线观看 | 亚洲国产成人久久精品软件| 免费看国产美女裸体视频| 国产成人精品亚洲日本在线观看 | 99久久亚洲综合精品成人网| 99久久国产综合精品女图图等你| 精品国产成人午夜福利| 国自产偷精品不卡在线| 亚洲中文字幕久久精品无码A| 亚洲AV成人片不卡无码| 99久久99这里只有免费费精品|