整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

ASP.NET Web Pages-WebMail

ASP.NET Web Pages-WebMail 帮助器

ebMail 帮助器 - 众多有用的 ASP.NET Web 帮助器之一。


WebMail 帮助器

WebMail 帮助器让发送邮件变得更简单,它按照 SMTP(Simple Mail Transfer Protocol 简单邮件传输协议)从 Web 应用程序发送邮件。


前提:电子邮件支持

为了演示如何使用电子邮件,我们将创建一个输入页面,让用户提交一个页面到另一个页面,并发送一封关于支持问题的邮件。


第一:编辑您的 AppStart 页面

如果在本教程中您已经创建了 Demo 应用程序,那么您已经有一个名为 _AppStart.cshtml 的页面,内容如下:

_AppStart.cshtml

@{

WebSecurity.InitializeDatabaseConnection("Users", "UserProfile", "UserId", "Email", true);

}

SP.NET 帮助器 - 对象参考手册


Analytics 对象参考手册(Google)

Helper描述
Analytics.GetGoogleHtml(webPropertyId)为指定的 ID 呈现 Google Analytics JavaScript 代码。
Analytics.GetStatCounterHtml(project, security)为指定的项目呈现 StatCounter Analytics JavaScript 代码。
Analytics.GetYahooHtml(account)为指定的账号呈现 Yahoo Analytics JavaScript 代码。

Bing 对象参考手册

Helper描述
Bing.SearchBox([boxWidth])给 Bing 传递搜索。您可以设置 Bing.SiteUrl 和 Bing.SiteTitle 属性来设定站点搜索和搜索框的标题,通常是在 _AppStart 页面设置这些属性。
Bing.AdvancedSearchBox([, boxWidth] [, resultWidth] [, resultHeight]

[, themeColor] [, locale])

用可选的格式显示 Bing 搜索结果在页面上。您可以设置 Bing.SiteUrl 和 Bing.SiteTitle 属性来设定站点搜索和搜索框的标题,通常是在 _AppStart 页面设置这些属性。

Chart 对象参考手册

Helper描述


Chart(width, height [, template] [, templatePath])初始化图表。
Chart.AddLegend([title] [, name])给图表添加一个图例。
Chart.AddSeries([name] [, chartType] [, chartArea]

[, axisLabel] [, legend] [, markerStep] [, xValue]

[, xField] [, yValues] [, yFields] [, options])

给图表添加一系列数据。

Crypto 对象参考手册

Helper描述
Crypto.Hash(string [, algorithm])

Crypto.Hash(bytes [, algorithm])

返回指定数据的哈希。默认算法是 sha256。

Facebook 对象参考手册

Helper描述
Facebook.LikeButton(href [, buttonLayout] [, showFaces] [, width] [, height]

[, action] [, font] [, colorScheme] [, refLabel])

让 Facebook 用户连接到网页。

FileUpload 对象参考手册

Helper描述
FileUpload.GetHtml([initialNumberOfFiles] [,allowMoreFilesToBeAdded]

[, includeFormTag] [, addText] [, uploadText])

为上传文件呈现 UI。

GamerCard 对象参考手册

Helper描述
GamerCard.GetHtml(gamerTag)呈现指定的 Xbox gamer 标签。

Gravatar 对象参考手册

Helper描述
Gravatar.GetHtml(email [, imageSize] [, defaultImage] [, rating]

[, imageExtension] [, attributes])

为指定的电子邮件地址呈现 Gravatar 图像。

Json 对象参考手册

Helper描述
Json.Encode(object)用 JavaScript Object Notation (JSON) 把数据对象转换为字符串。
Json.Decode(string)转换 JSON 编码的输入字符串为您指定的数据对象。

LinkShare 对象参考手册

Helper描述
LinkShare.GetHtml(pageTitle [, pageLinkBack] [, twitterUserName]

[, additionalTweetText] [, linkSites])

使用指定的标题和可选的 URL 呈现社会网络链接。

ModelState 对象参考手册

Helper描述
ModelStateDictionary.AddError(key, errorMessage)关联错误信息和一个表单域。使用 ModelState 帮助器访问成员。
ModelStateDictionary.AddFormError(errorMessage)关联错误信息和一个表单。使用 ModelState 帮助器访问成员。
ModelStateDictionary.IsValid如果没有验证错误,返回 true。使用 ModelState 帮助器访问成员。

ObjectInfo 对象参考手册

Helper描述
ObjectInfo.Print(value [, depth] [, enumerationLength])呈现一个对象和所有子对象的属性和值。

Recaptcha 对象参考手册

Helper描述
Recaptcha.GetHtml([, publicKey] [, theme] [, language] [, tabIndex])呈现 reCAPTCHA 验证测试。
ReCaptcha.PublicKey

ReCaptcha.PrivateKey

设置 reCAPTCHA 服务的公共和私有密钥。通常是在_AppStart 页面设置这些属性。
ReCaptcha.Validate([, privateKey])返回 reCAPTCHA 测试结果。
ServerInfo.GetHtml()Renders 呈现有关 ASP.NET Web Pages 的状态信息。

Twitter 对象参考手册

Helper描述
Twitter.Profile(twitterUserName)为指定的用户呈现 Twitter 流。
Twitter.Search(searchQuery)为指定的搜索文本呈现 Twitter 流。

Video 对象参考手册

Helper描述
Video.Flash(filename [, width, height])为指定的文件呈现宽度和高度可选的 Flash 视频播放。
Video.MediaPlayer(filename [, width, height])为指定的文件呈现宽度和高度可选 的 Windows Media 播放器。
Video.Silverlight(filename, width, height)为指定的 .xap 文件呈现所需的宽度和高度 的 Silverlight 播放器。

WebCache 对象参考手册

Helper描述
WebCache.Get(key)通过 key 返回指定的对象,如果对象未找到则返回 null。
WebCache.Remove(key)通过 key 从缓存中删除指定的对象。
WebCache.Set(key, value [, minutesToCache] [, slidingExpiration])通过 key 把 value 放置到指定名称的缓存中。

WebGrid 对象参考手册

Helper描述
WebGrid(data)Creates a 使用查询数据创建一个新的 WebGrid 对象。
WebGrid.GetHtml()Renders markup 显示数据在 HTML 表格中。
WebGrid.Pager()为 WebGrid 对象呈现一个页面。

WebImage 对象参考手册

Helper描述
WebImage(path)从指定的路径加载一个图像。
WebImage.AddImagesWatermark(image)为指定图像加水印。
WebImage.AddTextWatermark(text)为图像添加指定文本。
WebImage.FlipHorizontal()

WebImage.FlipVertical()

水平/垂直翻转图像
WebImage.GetImageFromRequest()当图像被传送到一个文件上传页面时,加载图像。
WebImage.Resize(width, height)调整图像大小。
WebImage.RotateLeft()

WebImage.RotateRight()

向左或向右旋转图像。
WebImage.Save(path [, imageFormat])保存图像到指定路径。

本文中,让我们尝试构建自定义 HTML Hepler以在 .NET Core MVC 应用程序中提供分页。首先对不熟悉的人简单介绍一下,什么是HTML Helper(助手):

  • HTML 助手使开发人员可以轻松快速地创建 HTML 页面。
  • 在大多数情况下,HTML 助手只是一个返回字符串的方法。
  • MVC 带有内置的 HTML 帮助器,例如 @Html.TextBox()、@Html.CheckBox()、@Html.Label 等。
  • HTML 助手在 razor 视图中呈现 html 控件。例如,@Html.TextBox() 渲染 <input type="textbox"> 控件,@Html.CheckBox() 渲染 <input type="checkbox"> 控件等。

需求

在Web应用程序中,如果要显示大量记录,则需要提供分页。在本文中,我们通过创建自定义 HTML Helper 在 .NET Core MVC 应用程序中实现分页。为了简单起见,我们只能使用数字来表示数据。

假设我们需要在多页中显示 55 条记录,每页有 10 个项目,如上所示。

开始

打开 Visual Studio 2019 > 创建 .NET Core MVC 应用程序,如下所示。

项目命名为 HTMLHelpersApp。

选择 .NET 框架版本。

创建所需的模型和帮助文件。

  1. 创建一个新模型“Number”。
  2. 右键单击 Model 文件夹并添加“Number”类。

在 Number.cs 中添加代码。该模型捕获用户输入。它只有一个属性:“InputNumber”。

using System;
using System.ComponentModel.DataAnnotations;


namespace HTMLHelpersApp.Models
{
    public class Number
    {
        //validation for required, only numbers, allowed range-1 to 500
        [Required(ErrorMessage="Value is Required!. Please enter value between 1 and 500.")]
        [RegularExpression(@"^\d+$", ErrorMessage="Only numbers are allowed. Please enter value between 1 and 500.")]
        [Range(1, 500, ErrorMessage="Please enter value between 1 and 500.")]
        public int InputNumber=1;
    }
}

现在让我们添加一个公共类 PageInfo.cs。创建新文件夹 Common 并添加 PageInfo.cs 类。

  1. 右键单击项目文件夹并添加一个新文件夹。

在 PageInfo.cs 中添加代码:

  1. Page Start 表示当前页面上的第一项。
  2. Page End 表示当前页面的最后一项。
  3. 每页项目数表示要在页面上显示的项目数。
  4. Last Page 表示页数/最后页码。
  5. Total Items 表示项目的总数。

根据总项目数和每页项目数,计算页面的总页数、第一个项目和最后一个项目。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;


namespace HTMLHelpersApp.Common
{
    public class PageInfo
    {
        public int TotalItems { get; set; }
        public int ItemsPerPage { get; set; }
        public int CurrentPage { get; set; }


        public PageInfo()
        {
            CurrentPage=1;
        }
        //starting item number in the page
        public int PageStart
        {
            get { return ((CurrentPage - 1) * ItemsPerPage + 1); }
        }
        //last item number in the page
        public int PageEnd
        {
            get
            {
                int currentTotal=(CurrentPage - 1) * ItemsPerPage + ItemsPerPage;
                return (currentTotal < TotalItems ? currentTotal : TotalItems);
            }
        }
        public int LastPage
        {
            get { return (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage); }
        }
        
    }
}

现在我们来到最重要的部分:创建自定义 HTML 助手。

  1. 创建自定义 HTML 帮助程序 PageLinks,它呈现页码、上一个和下一个链接。
  2. 在“Common”文件夹中添加一个新类“PagingHtmlHelpers.cs”。
  3. 在“PagingHtmlHelpers.cs”中添加代码。
  4. 扩展 HtmlHelper 并添加新功能以添加页面链接。
public static IHtmlContent PageLinks(this IHtmlHelper htmlHelper, PageInfo pageInfo, Func<int, string> PageUrl)

5.取2个参数

  1. pageInfo:添加页码
  2. 委托给函数:将整数和字符串作为参数添加控制器操作方法中所需的参数

使用标签构建器创建锚标签。

TagBuilder tag=new TagBuilder("a");
Add attributes
tag.MergeAttribute("href", hrefValue);
tag.InnerHtml.Append(" "+ innerHtml + " ");

样式也可以用作属性。

using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.Rendering;
using System;
using System.Text;


namespace HTMLHelpersApp.Common
{
    public static class PagingHtmlHelpers
    {
        public static IHtmlContent PageLinks(this IHtmlHelper htmlHelper, PageInfo pageInfo, Func<int, string> PageUrl)
        {
            StringBuilder pagingTags=new StringBuilder();
            //Prev Page
            if (pageInfo.CurrentPage > 1)
            {
                pagingTags.Append(GetTagString("Prev", PageUrl(pageInfo.CurrentPage - 1)));


            }
            //Page Numbers
            for (int i=1; i <=pageInfo.LastPage; i++)
            {
                pagingTags.Append(GetTagString(i.ToString(), PageUrl(i)));
            }
            //Next Page
            if (pageInfo.CurrentPage < pageInfo.LastPage)
            {
                pagingTags.Append(GetTagString("Next", PageUrl(pageInfo.CurrentPage + 1)));
            }
            //paging tags
            return new HtmlString(pagingTags.ToString());
        }


        private static string GetTagString(string innerHtml, string hrefValue)
        {
            TagBuilder tag=new TagBuilder("a"); // Construct an <a> tag
            tag.MergeAttribute("class","anchorstyle");
            tag.MergeAttribute("href", hrefValue);
            tag.InnerHtml.Append(" "+ innerHtml + "  ");
            using (var sw=new System.IO.StringWriter())
            {
                tag.WriteTo(sw, System.Text.Encodings.Web.HtmlEncoder.Default);
                return sw.ToString();            
            }
        }
    }
}

在“Models”文件夹中添加一个新类“ShowPaging.cs”。

  • DisplayResult将在每一页上显示数字列表。
  • PageInfo将捕获所有页面详细信息,例如每页上的页数、总项目、开始项目和最后一个项目等。
using HTMLHelpersApp.Common;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;


namespace HTMLHelpersApp.Models
{
    public class ShowPaging
    {
        
        //validation for required, only numbers, allowed range-1 to 500
        [Required(ErrorMessage="Value is Required!. Please enter value between 1 and 500.")]
        [RegularExpression(@"^\d+$", ErrorMessage="Only positive numbers are allowed. Please enter value between 1 and 500.")]
        [Range(1, 500, ErrorMessage="Please enter value between 1 and 500.")]
        public int InputNumber { get; set; }


        public List<string> DisplayResult { get; set; }


        public PageInfo PageInfo;
    }
}

添加新控制器

添加一个新控制器:“HTMLHelperController”

右键单击控制器文件夹并在上下文菜单中选择控制器。

选择“MVCController-Empty”。

在“HTMLHelperController”中添加代码。

using HTMLHelpersApp.Common;
using HTMLHelpersApp.Models;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;


namespace HTMLHelpersApp.Controllers
{
    public class HTMLHelperController : Controller
    {
        private const int PAGE_SIZE=10;
        public IActionResult Number()
        {
            return View();
        }


        public IActionResult ShowPaging(ShowPaging model, int page=1, int inputNumber=1)
        {
            if (ModelState.IsValid)
            {
                var displayResult=new List<string>();
                string message;


                //set model.pageinfo
                model.PageInfo=new PageInfo();
                model.PageInfo.CurrentPage=page;
                model.PageInfo.ItemsPerPage=PAGE_SIZE;
                model.PageInfo.TotalItems=inputNumber;


                //Set model.displayresult - numbers list
                for (int count=model.PageInfo.PageStart; count <=model.PageInfo.PageEnd; count++)
                {
                    message=count.ToString();
                    displayResult.Add(message.Trim());
                }
                model.DisplayResult=displayResult;
            }
            //return view model
            return View(model);
        }
    }
}

在 Views 文件夹中创建一个新文件夹“HTMLHelper”,并创建一个新视图“Number.cshtml”。

在“Number.cshtml”中添加代码。

@model HTMLHelpersApp.Models.Number


<h4>Number</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="ShowPaging" method="get">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <input asp-for="InputNumber" class="form-control"/>
            </div>
            <div class="form-group">
                <input type="submit" value="Submit" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

同样,创建一个新视图“ShowPaging.cshtml”。

@model HTMLHelpersApp.Models.ShowPaging
@using HTMLHelpersApp.Common


<link rel="stylesheet" href="~/css/anchorstyles.css"/>
<form>
    <h4>Show Paging</h4>
    <hr />
    <div asp-validation-summary="All" class="text-danger"></div>
    <dl class="row">
        <dt class="col-sm-2">
            <b>Number: </b> @Html.DisplayFor(model=> model.InputNumber)
        </dt>
        <dd>
            <a asp-action="Number">Change Number</a>
        </dd>
    </dl>


    <div>
        @if (Model !=null && Model.DisplayResult !=null)
        {
            <ul>
                @foreach (var item in Model.DisplayResult)
                {
                    <li>@Html.Raw(item)</li>
                }
            </ul>
            <div>
                @Html.PageLinks(@Model.PageInfo, x=> Url.Action("ShowPaging",
                    new { page=x.ToString(), inputNumber=@Model.InputNumber }))
            </div>
        }
    </div>        
 </form>

解决方案资源管理器如下所示:

在“startup.cs”中配置默认控制器和操作。

编译并运行应用程序,输入数字 35。

点击提交。

你会在底部看到分页,每页显示10个数字,一共4页,且每页都一个链接。