Asp.net Ajax 编程备忘录----细数28个服务器端控件

 

 

1.Accordion
   功能:实现了QQ、Msn好友分类的折叠效果,就像包含了多个CollapsiblePanels
   细节: (1)不要把Accordion放在Table种同时又把 FadeTransitions 设置为True,这将引起布局混乱
                (2)每一个 AccordionPane control 有一个Header 和Content的 template
                (3)在Content中可以进行任意扩展,你什么都可以放上^_^
                (4)有三种AutoSize modes :None(推荐) Limit  Fill
                (5)Accordion表现的更像是一个容器

  代码示意:           
      
< ajaxToolkit:Accordion  ID ="MyAccordion"  runat ="server"  SelectedIndex ="0"  HeaderCssClass ="accordionHeader"
            ContentCssClass
="accordionContent"  FadeTransitions ="false"  FramesPerSecond ="40"
            TransitionDuration
="250"  AutoSize ="None" >
            
< Panes >
                
< ajaxToolkit:AccordionPane  ID ="AccordionPane1"  runat ="server" >
                    
< Header >
                        
< href =""  onclick ="return false;"  class ="accordionLink" > 1. Accordion </ a ></ Header >
                    
< Content >
                    
</ Content >
                
</ ajaxToolkit:AccordionPane >
            
</ Panes >
        
</ ajaxToolkit:Accordion >  
 

 2. AlwaysVisibleControl 
   功能:最多的应用是在线小说的目录和不胜其烦的浮动小广告
   细节: (1)避免控件闪烁,把这个控件要在目标位置时使用absolutely position
                (2) HorizontalSide="Center" VerticalSide="Top" 使用这个方法控制浮动在什么位置
 代码示意: 
    
< cc1:AlwaysVisibleControlExtender  ID ="AlwaysVisibleControlExtender1"  HorizontalSide ="Center"  VerticalSide ="Top"   TargetControlID ="Panel1"  runat ="server" >

3.Animation
   功能:28个控件种效果最酷的!顾名思义实现动画效果
   细节: (1)不只是控件:pluggable, extensible framework
                (2)用在什么时候:OnLoad  OnClick  OnMouseOver OnMouseOut OnHoverOver OnHoverOut
                (3)具体使用有很多可以谈的,有理由单独写一个Animation Xml 编程介绍
  代码示意:
   
< ajaxToolkit:AnimationExtender  ID ="ae"
  runat
="server"  TargetControlID ="ctrl" >
    
< Animations >
        
< OnLoad >    </ OnLoad >
        
< OnClick >    </ OnClick >
        
< OnMouseOver >    </ OnMouseOver >
        
< OnMouseOut >    </ OnMouseOut >
        
< OnHoverOver >    </ OnHoverOver >
        
< OnHoverOut >    </ OnHoverOut >
    
</ Animations >
</ ajaxToolkit:AnimationExtender >

4.CascadingDropDown
   功能:DropDownList联动,调用Web Service
   细节: (1)DropDownList行为扩展
                (2)如果使用Web service 方法签名必须符合下面的形式:
                [WebMethod]
                public CascadingDropDownNameValue[] GetDropDownContents(
                string knownCategoryValues, string category){...}
 代码示意:
                 
< ajaxToolkit:CascadingDropDown  ID ="CascadingDropDown1"  runat ="server"  TargetControlID ="DropDownList1"  Category ="Make"   PromptText ="Please select a make"   LoadingText ="[Loading makes]"   ServicePath ="CarsService.asmx"  ServiceMethod ="GetDropDownContents" />
                
< ajaxToolkit:CascadingDropDown  ID ="CascadingDropDown2"  runat ="server"  TargetControlID ="DropDownList2"  Category ="Model"  PromptText ="Please select a model"  LoadingText ="[Loading models]"  ServiceMethod ="GetDropDownContentsPageMethod"  ParentControlID ="DropDownList1" />
                
< ajaxToolkit:CascadingDropDown  ID ="CascadingDropDown3"  runat ="server"  TargetControlID ="DropDownList3"  Category ="Color"  PromptText ="Please select a color"  LoadingText ="[Loading colors]"  ServicePath ="~/CascadingDropDown/CarsService.asmx"  ServiceMethod ="GetDropDownContents"  ParentControlID ="DropDownList2" />
   

   5.CollapsiblePanel
   功能:Xp任务栏折叠效果
   细节: (1)可以扩展任何一个 ASP.NET Panel control
                (2) CollapsiblePanel 默认认为使用了 标准 CSS box model 早期的浏览器要!DOCTYPE 中设置页面为自适应方式提交数据rendered in IE's standards-compliant mode.
 代码示意:
   
< ajaxToolkit:CollapsiblePanelExtender  ID ="cpe"  runat ="Server"
    TargetControlID
="Panel1"
    CollapsedSize
="0"
    ExpandedSize
="300"
    Collapsed
="True"
    ExpandControlID
="LinkButton1"
    CollapseControlID
="LinkButton1"
    AutoCollapse
="False"
    AutoExpand
="False"
    ScrollContents
="True"
    TextLabelID
="Label1"
    CollapsedText
="Show Details"
    OpenedText
="Hide Details"  
    ImageControlID
="Image1"
    ExpandedImage
="~/images/collapse.jpg"
    CollapsedImage
="~/images/expand.jpg"
    ExpandDirection
="Height" />
   6.ConfirmButton
   功能:就是弹出来一个确定对话框
   细节: 本人认为不是最简单实现的方法,我的方法:
   this.Button1.Attributes["onclick"]="javascript:return confirm('确定要停止下载么?');";
      不知道是不是我没有发现这个控件的其它优势。
     
7.DragPanel
   功能:页面拖动
   细节: (1)TargetControlID 要拖动的控件
                (2)DragHandleID   拖动的标题栏所在的ControlID 
代码示意
 
< ajaxToolkit:DragPanelExtender  ID ="DPE1"  runat ="server"
    TargetControlID
="Panel3"
    DragHandleID
="Panel4"   />
8.DropDown
   功能:什么都可以以下拉菜单的形式弹出来
   细节: (1)TargetControlID要在什么控件上实现扩展
                (2)DropDownControlID弹出来什么
 代码示意:
  
< asp:Panel  ID ="DropPanel"  runat ="server"  CssClass ="ContextMenuPanel"  Style ="display: none;
            visibility: hidden;"
>
             
< asp:LinkButton  runat ="server"  ID ="Option1"  Text ="Option 1"  CssClass ="ContextMenuItem"
                OnClick
="OnSelect"   />
            
< asp:LinkButton  runat ="server"  ID ="Option2"  Text ="Option 2"  CssClass ="ContextMenuItem"
                OnClick
="OnSelect"   />
            
< asp:LinkButton  runat ="server"  ID ="Option3"  Text ="Option 3 (Click Me!)"  CssClass ="ContextMenuItem"
                OnClick
="OnSelect"   />
        
</ asp:Panel >
        
< cc1:DropDownExtender  runat ="server"  ID ="DDE"  TargetControlID ="TextLabel"
            DropDownControlID
="DropPanel"   />

9.DropShadow
   功能:阴影效果,其实可以放给美工实现
   细节: (1)Width 单位:px  默认5px
                (2)Opacity  不透明度0-1.0 默认.5
  代码示意:
    
< ajaxToolkit:DropShadowExtender  ID ="dse"  runat ="server"
        TargetControlID
="Panel1"  
        Opacity
=".8"  
        Rounded
="true"
        TrackPosition
="true"   />
10.DynamicPopulate
   功能:能实用Web Service或页面方法来替换控件的内容
   细节: (1)ClearContentsDuringUpdate  替换之前先清除以前的内容(默认True)
                (2)PopulateTriggerControlID 触发器绑定的控件 单击时触发
                (3)ContextKey传递给Web Service的随机字符串
                (4) Web Service方法签名必须符合下面的形式:
                [WebMethod]
                string DynamicPopulateMethod(string contextKey)
                {...}
                Note you can replace "DynamicPopulateMethod" with a naming of your choice, but the return
                type and parameter name and type must exactly match, including case. 
代码示意:
< ajaxToolkit:DynamicPopulateExtender  ID ="dp"  runat ="server"
    TargetControlID
="Panel1"  
    ClearContentsDuringUpdate
="true"  
    PopulateTriggerControlID
="Label1"  
    ServiceMethod
="GetHtml"  
    UpdatingCssClass
="dynamicPopulate_Updating"   />
              
11.FilteredTextBox
   功能:文本框数据过滤
   细节: (1)过滤条件Numbers LowercaseLetters UppercaseLetters   Custom
                (2)过滤条件也可以是Custom的组合 FilterType="Custom, Numbers"
                (3)ValidChars="+-=/*()." Custom要定义这样的有效字符串
                (4) 其实这是个鸡肋:你可以输入中文,聊胜于无,忍了
示意代码:
< ajaxToolkit:FilteredTextBoxExtender  ID ="ftbe"  runat ="server"
        TargetControlID
="TextBox3"          
        FilterType
="Custom, Numbers"
        ValidChars
="+-=/*()."   />
12.HoverMenu
   功能:鼠标靠近时显示菜单,可以用在在线数据修改的表格上作为功能菜单
   细节: (1)PopupControlID要弹出来什么
                (2)PopupPostion 在哪里弹出来Left (Default), Right, Top, Bottom, Center.
                (3)OffsetX/OffsetY 弹出项与源控件的距离
                (4) PopDelay 弹出延时显示 单位milliseconds. Default is 100.
代码示意:
< ajaxToolkit:HoverMenuExtender  ID ="hme2"  runat ="Server"
    TargetControlID
="Panel9"
    HoverCssClass
="popupHover"
    PopupControlID
="PopupMenu"
    PopupPosition
="Left"
    OffsetX
="0"
    OffsetY
="0"
    PopDelay
="50"   />
13.ModalPopup
   功能:Xp的关机效果,后面全部灰掉,很多邮箱的删除对话框都着种效果
   细节: (1)本质上讲这是一个对话框模版,比ConfirmButton有意义有更强的扩展性!
                (2)从下面的代码中我们发现 点OK的时候可以调用后台方法
                (3)同时可以执行一段脚本
代码示意:
  
< asp:Panel  ID ="Panel2"  runat ="server"  CssClass ="modalPopup"  style ="display:none" >
        
< p >
            
< asp:Label  ID ="Label1"  runat ="server"  BackColor ="Blue"  ForeColor ="White"  Style ="position: relative"
                Text
="信息提示" ></ asp:Label > &nbsp; </ p >
        
< > 确定要删除当前下载的任务么? </ p >
        
< style ="text-align:center;" >
        
< asp:Button  ID ="Button1"  runat ="server"  Text ="OK"   ></ asp:Button >
        
< asp:Button  ID ="Button2"  runat ="server"  Text ="Cancel" ></ asp:Button >
        
</ p >
    
</ asp:Panel >
    
< ajaxToolkit:ModalPopupExtender  ID ="ModalPopupExtender"  runat ="server"  TargetControlID ="LinkButton1"  
    PopupControlID
="Panel2"  BackgroundCssClass ="modalBackground"  DropShadow ="true"  
    OkControlID
="Button1"  OnOkScript ="onOk()"  CancelControlID ="CancelButton"   />
14.MutuallyExlcusiveCheckBox
   功能:互斥复选框就像Radio一样
   细节: (1)Key属性用来分组就像RdiolistGroup一样
                (2)argetControlID用来绑定已有的CheckBox
   代码示意:
               
< ajaxToolkit:MutuallyExclusiveCheckboxExtender  runat ="server"
    ID
="MustHaveGuestBedroomCheckBoxEx"
    TargetControlID
="MustHaveGuestBedroomCheckBox"  
    Key
="GuestBedroomCheckBoxes"   />
15.NoBot
   功能:Captcha 图灵测试 反垃圾信息控件
   细节: (1)OnGenerateChallengeAndResponse 这个属性是EventHandler<NoBotEventArgs> 调用服务器端的方法,注意方法签名
                       例如:   protected void CustomChallengeResponse(object sender, NoBotEventArgs e) {……}
 代码示意:
    
< ajaxToolkit:NoBot
  
ID ="NoBot2"
  runat
="server"
  OnGenerateChallengeAndResponse
="CustomChallengeResponse"
  ResponseMinimumDelaySeconds
="2"
  CutoffWindowSeconds
="60"
  CutoffMaximumInstances
="5"   />
16.NumericUpDown
   功能:实现Winform里面的Updown
   细节: (1)普通整数增减
                (2)值列表循环显示比如下面的第二个例子RefValues
                (3)调用Web Service的格式:
               
< ajaxToolkit:NumericUpDownExtender  ID ="NUD1"  runat ="server"
    TargetControlID
="TextBox1"  
    Width
="100"
    RefValues
="January;February;March;April"
    TargetButtonDownID
="Button1"
    TargetButtonUpID
="Button2"
    ServiceDownPath
="WebService1.asmx"
    ServiceDownMethod
="PrevValue"
    ServiceUpPath
="WebService1.asmx"
    ServiceUpMethod
="NextValue"
    Tag
="1"   />
代码示意:
           
< ajaxToolkit:NumericUpDownExtender  ID ="NumericUpDownExtender1"  runat ="server"
                    TargetControlID
="TextBox1"  Width ="120"  RefValues =""
                    ServiceDownMethod
=""  ServiceUpMethod =""  TargetButtonDownID =""  TargetButtonUpID =""   />
                
< ajaxToolkit:NumericUpDownExtender  ID ="NumericUpDownExtender2"  runat ="server"
                    TargetControlID
="TextBox2"  Width ="120"  RefValues ="January;February;March;April;May;June;July;August;September;October;November;December"
                    ServiceDownMethod
=""  ServiceUpMethod =""  TargetButtonDownID =""  TargetButtonUpID =""   />
                       
< ajaxToolkit:NumericUpDownExtender  ID ="NumericUpDownExtender4"  runat ="server"
                    TargetControlID
="TextBox4"  Width ="80"  TargetButtonDownID ="img1"
                    TargetButtonUpID
="img2"  RefValues =""  ServiceDownMethod =""  ServiceUpMethod =""   />

17.PagingBulletedList
   功能:扩展BulletedList的分页功能
   细节: (1)可以控制每页最多显示多少条,是否排序
                (2)IndexSize表示index headings 的字符数,如果MaxItemPerPage设置了概属性被忽略
                (3)MaxItemPerPage分页每页最大条数
代码示意:
 
< ajaxToolkit:PagingBulletedListExtender  ID ="PagingBulletedListExtender1"  BehaviorID ="PagingBulletedListBehavior1"  runat ="server"
                    TargetControlID
="BulletedList1"
                    ClientSort
="true"
                    IndexSize
="1"
                    Separator
=" - "
                    SelectIndexCssClass
="selectIndex"
                    UnselectIndexCssClass
="unselectIndex"   />  

18.PasswordStrength
   功能:验证密码强度
   细节: StrengthIndicatorType两种显示方式:文字提示,进度条提示
代码示意:
< ajaxToolkit:PasswordStrength  ID ="PasswordStrength1"  runat ="server"  DisplayPosition ="RightSide"  TargetControlID ="TextBox1"
                    StrengthIndicatorType
="Text"  PreferredPasswordLength ="10"  PrefixText ="Strength:"  
                    HelpStatusLabelID
="TextBox1_HelpLabel"  TextCssClass ="TextIndicator_TextBox1"   TextStrengthDescriptions ="Very Poor;Weak;Average;Strong;Excellent"
                    MinimumNumericCharacters
="0"  MinimumSymbolCharacters ="0"  RequiresUpperAndLowerCaseCharacters ="false" />
    
< ajaxToolkit:PasswordStrength  ID ="PasswordStrength2"  runat ="server"  DisplayPosition ="RightSide"  TargetControlID ="TextBox2"
                    StrengthIndicatorType
="BarIndicator"  PreferredPasswordLength ="15"  HelpStatusLabelID ="TextBox2_HelpLabel"
                     BarIndicatorCssClass
="BarIndicator_TextBox2"  BarBorderCssClass ="BarBorder_TextBox2"
                     MinimumNumericCharacters
="1"  MinimumSymbolCharacters ="1"  RequiresUpperAndLowerCaseCharacters ="true"   />
    
< ajaxToolkit:PasswordStrength  ID ="PasswordStrength3"  runat ="server"  DisplayPosition ="BelowLeft"  TargetControlID ="TextBox3"
                    StrengthIndicatorType
="Text"  PreferredPasswordLength ="20"  PrefixText ="Meets Policy? "  TextCssClass ="TextIndicator_TextBox3"
                     MinimumNumericCharacters
="2"  MinimumSymbolCharacters ="2"  RequiresUpperAndLowerCaseCharacters ="true"
                     TextStrengthDescriptions
="Not at all;Very Low compliance;Low Compliance;Average Compliance;Good Compliance;Very High Compliance;Yes"
                     HelpHandleCssClass
="TextIndicator_TextBox3_Handle"  HelpHandlePosition ="LeftSide"   />

19.PopupControl
   功能:任何控件上都可以弹出任何内容
   细节: (1)TargetControlID - The ID of the control to attach to
                (2)PopupControlID - The ID of the control to display
                (3)CommitProperty -属性来标识返回的值
                (4) CommitScript -把返回结果值通过脚本处理,用到CommitProperty
  代码示意:
      
< ajaxToolkit:PopupControlExtender   ID ="PopupControlExtender2"  runat ="server"  TargetControlID ="MessageTextBox"  
      PopupControlID
="Panel2"  CommitProperty ="value"  CommitScript ="e.value += ' - do not forget!';"  Position ="Bottom"   />

20.Rating
   功能:级别控件
   细节: 又是一个鸡肋,没有太大实用价值,看代码吧
   代码示意:
   
< ajaxToolkit:Rating  ID ="ThaiRating"  runat ="server"
    CurrentRating
="2"
    MaxRating
="5"
    StarCssClass
="ratingStar"
    WaitingStarCssClass
="savedRatingStar"
    FilledStarCssClass
="filledRatingStar"
    EmptyStarCssClass
="emptyRatingStar"
    OnChanged
="ThaiRating_Changed"   />  
    
   
21.ReorderList
   功能:这个控件的炫酷程度仅次于Animation ,可以动态移动数据
   细节: (1)绑定数据,拖动数据之后数据将被更新到绑定源
                (2)它不是已有控件的扩展是全新的服务器端控件,只是它对Ajax行为是敏感的
                (3)重排的实现有两种方式:CallBack PostBack 前者的发生在页面上是没有PostBack的(也就是没有刷新页面)
                (4) 而数据添加或者编辑的时候就必须要使用PostBack来同步服务器端的数据状态
                (5)PostbackOnReorder就是针对两种策略进行选择
                (6)可以扩展的很多,三言两语难以说尽给出基本框架吧,回头再说
代码示意:
   
< ajaxToolkit:ReorderList  ID ="ReorderList1"  runat ="server"  
    DataSourceID
="ObjectDataSource1"
    DragHandleAlignment
="Left"  
    ItemInsertLocation
="Beginning"
    DataKeyField
="ItemID"  
    SortOrderField
="Priority"
    AllowReorder
="true" >
      
< ItemTemplate > </ ItemTemplate >
      
< ReorderTemplate > </ ReorderTemplate >
      
< DragHandleTemplate > </ DragHandleTemplate >
      
< InsertItemTemplate > </ InsertItemTemplate >
</ ajaxToolkit:ReorderList >

22.ResizableControl
   功能:就像设计状态一样可以拖动修改大小,可是有什么实际的意义么,放大字体?没有想到
   细节: (1)HandleCssClass - The name of the CSS class to apply to the resize handle 这个属性必须要有!
  代码示意:
< ajaxToolkit:ResizableControlExtender  ID ="RCE"  runat ="server"
    TargetControlID
="PanelImage"
    HandleCssClass
="handleImage"
    ResizableCssClass
="resizingImage"
    MinimumWidth
="50"
    MinimumHeight
="20"
    MaximumWidth
="260"
    MaximumHeight
="130"
    OnClientResize
="OnClientResizeImage"
    HandleOffsetX
="3"
    HandleOffsetY
="3"   />
    

23.RoundedCorners
   功能:控件圆角 纯粹是控制外观的了,什么时候审美疲劳了还要改,呵呵
   细节: (1)还有一个非常非常坑人的地方:你必须要设置 CssClass="roundedPanel"要不然不起作用
                (2) Radius设置弧度,默认是5
                (3)好象只适用于容器
代码示意:
              
< ajaxToolkit:RoundedCornersExtender  ID ="rce"  runat ="server"      TargetControlID ="Panel1"      Radius ="6"   />

   
24.Slider
   功能:实现WinForm中的Slider控件效果
   细节: (1)修改文本框的值也可以影响Slider的状态!这个反馈还是有用的!
  代码示意:
              
< asp:TextBox  ID ="TextBox1"  runat ="server" ></ asp:TextBox >                               
    
< cc1:SliderExtender  ID ="SliderExtender2"  runat ="server"
                                BehaviorID
="Slider2"
                                TargetControlID
="Slider2"
                                BoundControlID
="TextBox1"
                                Orientation
="Horizontal"  
                                EnableHandleAnimation
="true"
                                 Minimum
="0"
                                Maximum
="100"
                                
/>

25.TextBoxWatermark
   功能:文本水印
   细节: 没有什么说的看代码--->
 代码示意:
    
< asp:TextBox  ID ="TextBox1"  CssClass ="unwatermarked"  Width ="150"  runat ="server" ></ asp:TextBox >
            
< cc1:TextBoxWatermarkExtender  ID ="TextBoxWatermarkExtender1"  runat ="server"  TargetControlID ="TextBox1"  WatermarkText ="请输入用户名"  WatermarkCssClass ="watermarked"   />

26.UpdatePanelAnimation
   功能:更新动画效果
   细节:代码结构简单但是要说的东西很多,回头再说写专题吧
代码示意:
  
< ajaxToolkit:UpdatePanelAnimationExtender  ID ="ae"
  runat
="server"  TargetControlID ="up" >
     
< Animations >
        
< OnUpdating >    </ OnUpdating >
        
< OnUpdated >    </ OnUpdated >
    
</ Animations >
</ ajaxToolkit:UpdatePanelAnimationExtender >

27.ToggleButton
   功能:就是把一个CheckBox的逻辑应用到一个按钮上,于是就有了双态按钮这么个玩意,有点意思啊
   闲言少叙,看代码:
< asp:CheckBox  ID ="CheckBox1"  Checked ="true"  Text ="I like ASP.NET"  runat ="server" />
    
< cc1:ToggleButtonExtender  ID ="ToggleButtonExtender1"  runat ="server"  TargetControlID ="CheckBox1"  ImageWidth ="19"
     ImageHeight
="19"  UncheckedImageUrl ="Image/down.gif"  CheckedImageUrl ="Image/up.gif"  CheckedImageAlternateText ="Check"  
     UncheckedImageAlternateText
="UnCheck"   />

28.ValidatorCallout
   功能:Windows系统中最常见的气泡提示,比如你磁盘空间不足的时候……
   细节: 是对数据验证控件的扩展,比较新鲜
代码示意:
 
< asp:RequiredFieldValidator  runat ="server"  ID ="NReq"  ControlToValidate ="NameTextBox"  Display ="None"  ErrorMessage ="<b>Required Field Missing</b><br />A name is required."   />
        
< asp:RequiredFieldValidator  runat ="server"  ID ="PNReq"  ControlToValidate ="PhoneNumberTextBox"  Display ="None"  ErrorMessage ="<b>Required Field Missing</b><br />A phone number is required.<div style='margin-top:5px;padding:5px;border:1px solid #e9e9e9;background-color:white;'><b>Other Options:</b><br /><a href='javascript:alert(&quot;not implemented but you get the idea;)&quot;);'>Extract from Profile</a></div>"   />
        
< asp:RegularExpressionValidator  runat ="server"  ID ="PNRegEx"  ControlToValidate ="PhoneNumberTextBox"  Display ="None"  ErrorMessage ="<b>Invalid Field</b><br />Please enter a phone number in the format:<br />(###) ###-####"  ValidationExpression ="((/(/d{3}/) ?)|(/d{3}-))?/d{3}-/d{4}"   />
        
< cc1:ValidatorCalloutExtender  runat ="Server"  ID ="NReqE"  TargetControlID ="NReq"  HighlightCssClass ="highlight"   />
        
< cc1:ValidatorCalloutExtender  runat ="Server"  ID ="PNReqE"  TargetControlID ="PNReq"  HighlightCssClass ="highlight"  Width ="350px"   />
        
< cc1:ValidatorCalloutExtender  runat ="Server"  ID ="PNReqEx"  TargetControlID ="PNRegEx"  HighlightCssClass ="highlight"   />

                                                                                                                                                           全文完
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET Core 提供了内置的身份验证和授权功能,可以轻松地实现用户的登录和登出功能。 要实现登录功能,首先需要在 ConfigureServices 方法中添加身份验证服务: ```csharp services.AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme; }) .AddCookie(options => { options.LoginPath = "/Account/Login/"; options.LogoutPath = "/Account/Logout/"; }) .AddGoogle(options => { options.ClientId = Configuration["Authentication:Google:ClientId"]; options.ClientSecret = Configuration["Authentication:Google:ClientSecret"]; }); ``` 上面的代码中,我们添加了 Cookie 身份验证服务,并指定了登录和登出的路径。同时,我们还添加了 Google 身份验证服务,并设置了 ClientId 和 ClientSecret。 接着,在 Configure 方法中启用身份验证中间件: ```csharp app.UseAuthentication(); ``` 现在,我们可以在 AccountController 中添加 Login 和 Logout 的动作方法: ```csharp public IActionResult Login(string returnUrl = "/") { ViewData["ReturnUrl"] = returnUrl; return View(); } [HttpPost] public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = "/") { if (ModelState.IsValid) { var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false); if (result.Succeeded) { _logger.LogInformation("User logged in."); return RedirectToLocal(returnUrl); } if (result.RequiresTwoFactor) { return RedirectToAction(nameof(LoginWith2fa), new { returnUrl, model.RememberMe }); } if (result.IsLockedOut) { _logger.LogWarning("User account locked out."); return RedirectToAction(nameof(Lockout)); } else { ModelState.AddModelError(string.Empty, "Invalid login attempt."); return View(model); } } // If we got this far, something failed, redisplay form return View(model); } [HttpPost] public async Task<IActionResult> Logout() { await _signInManager.SignOutAsync(); _logger.LogInformation("User logged out."); return RedirectToAction(nameof(HomeController.Index), "Home"); } ``` 上面的代码中,我们首先添加了一个 Get 请求的 Login 方法,用于显示登录页面。接着,我们添加了一个 Post 请求的 Login 方法,用于处理用户提交的登录表单。在这个方法中,我们调用了 _signInManager.PasswordSignInAsync 方法进行身份验证,并根据不同的结果进行相应的处理。最后,我们还添加了一个 Logout 方法,用于处理用户的登出请求。 现在,我们只需要在视图中添加相应的表单,就可以实现登录和登出功能了: ```html <form asp-action="Login" asp-route-returnUrl="@ViewData["ReturnUrl"]" method="post"> <div class="form-group"> <label asp-for="Email"></label> <input asp-for="Email" class="form-control" /> <span asp-validation-for="Email" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="Password"></label> <input asp-for="Password" class="form-control" /> <span asp-validation-for="Password" class="text-danger"></span> </div> <div class="form-group"> <div class="checkbox"> <label asp-for="RememberMe"> <input asp-for="RememberMe" /> @Html.DisplayNameFor(m => m.RememberMe) </label> </div> </div> <div class="form-group"> <button type="submit" class="btn btn-primary">Login</button> </div> </form> <a asp-action="Logout" asp-controller="Account">Logout</a> ``` 上面的代码中,我们添加了一个登录表单和一个登出链接,用于演示登录和登出功能。其中,登录表单使用了 asp-for 和 asp-validation-for 标签帮助器,可以自动生成相应的 HTML 元素和验证信息。登出链接使用了 asp-action 和 asp-controller 标签帮助器,可以自动生成相应的 URL。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值