一、視圖助手HTMLHelper
HTMLHelper-輔助視圖生成表單元素的工具類
頁面元素:連接、驗證、Form元素、其他
HtmlHelper的優勢
- 避免輸錯表單元素,提高開發效率
- 保持表單數據的狀態(更簡單的表單元素保持方法)
- 支持驗證
常見輸出表單方法
方法 | 對應的HTML |
---|---|
BeginForm(string actName,string conName ) | < form/> |
Hidden(string name) | < input type=“Hidden”> |
Password(string name) | < input type=“Password”> |
RadioButton(string name,object value) | < input type=“radio”> |
CheckBox(string name) | < input type=“checkbox”> |
TextBox(string name) | < input type=“text”> |
TextArea(string name) | < textarea> |
DropDownList(string name) | < select> |
ListBox(string name) | < select multiple=“true”> |
ActionLink(string linktext,sttring action) | < a/> |
ValidationMessage(string modelName) | 輸出表單驗證信息 |
ValidationSummary() | 輸出驗證彙總信息 |
Partial(string partialViewName) | 輸出分部視圖(用戶控件)內容 |
- HTML輔助方法其實並不是直接從ViewBag的Model對象獲取模型數據,而是從ModelState對象獲取
- 如果用Model自動綁定,並使用了HTML輔助方法,爲了讓表單保持頁面提交的值,不需要傳遞數據值
二、MVC圖片驗證碼
1.Model文件下
public class CreateValidateCode
{
private string CreateRandomCode(int codeCount)
{
string code = "";
Random r = new Random();
//偶數給數字,奇數給小寫字母
for (int i = 0; i < codeCount; i++)
{
//小寫字母和數字
int type = r.Next(100);
if (type % 2 == 0)
{
code += r.Next(0, 10);
}
else
{
code += (char)r.Next(97, 123);
}
}
return code;
}
/// <summary>
/// 生成驗證碼
/// </summary>
/// <param name="codeCount"></param>
/// <returns></returns>
public byte[] CreateValidateGraphic(int codeCount,out string content)
{
string code = CreateRandomCode(codeCount);
content = code;
//驗證碼圖片初始化
Bitmap img = new Bitmap((int)Math.Ceiling(code.Length * 16.0), 27);
Graphics g = Graphics.FromImage(img);
try
{
Random r = new Random();
g.Clear(Color.White);//清空背景
//干擾線30條
for (int i = 0; i < 30; i++)
{
int x1 = r.Next(img.Width);
int y1 = r.Next(img.Height);
int x2 = r.Next(img.Width);
int y2 = r.Next(img.Height);
g.DrawLine(new Pen(Color.Silver),x1,y1,x2,y2);
}
Font font = new Font("Arial",13, (FontStyle.Bold| FontStyle.Italic));
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.Blue, Color.DarkRed, 0.25f, true);//設置畫刷
g.DrawString(code, font, brush, 3, 3);
//干擾點100個
for (int i = 0; i < 100; i++)
{
int x = r.Next(img.Width);
int y = r.Next(img.Height);
img.SetPixel(x,y,Color.FromArgb(r.Next()));
}
g.DrawRectangle(new Pen(Color.Black),0,0,img.Width-1,img.Height-1);
//保存圖片
MemoryStream stream = new MemoryStream();
img.Save(stream, ImageFormat.Jpeg);
return stream.ToArray();
}
finally
{
g.Dispose();
img.Dispose();
}
}
}
2.控制器實現
//生成驗證碼圖片
public ActionResult ValidateCode()
{
//1.生成一個隨機的4位驗證碼
CreateValidateCode create = new CreateValidateCode();
string code = "";
//2.生成驗證碼並生成圖片文件的字節流
byte[] arry = create.CreateValidateGraphic(4,out code);
//3.將生成的驗證碼保存在TempData裏面,驗證碼在ASP.NET開發裏面都是通過Session保存的,所以用Session也行,用TempData也行
TempData["VaildataCode"] = code;
//4.返回驗證碼圖片
return File(arry,"image/Jpeg");
}
3.視圖顯示
<tr>
<td>驗證碼:</td>
<td>
<input type="text" name="ValidateCode" value="@(Model==null?"":Model.ValidateCode)" />
<img src="@Url.Action("ValidateCode")" alt="驗證碼圖片" title="看不清?點擊更換" οnclick="this.src = this.src+'?'"/>
</td>
<td>@Html.ValidationMessage("ValidateCode")
@Html.ValidationMessage("validata")</td>
</tr>
三、郵箱驗證碼
1.Model文件夾
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.Net.Mail;//驗證功能命名空間
namespace EmailYanZhengDemo.Models
{
public class CreateValidateCode
{
/// <summary>
/// 生成隨機字符串
/// </summary>
/// <param name="codeCount"></param>
/// <returns></returns>
private string CreateRandomCode(int codeCount)
{
string code = "";
Random r = new Random();
//偶數給數字,奇數給小寫字母
for (int i = 0; i < codeCount; i++)
{
//小寫字母和數字
int type = r.Next(100);
if (type % 2 == 0)
{
code += r.Next(0, 10);
}
else
{
code += (char)r.Next(97, 123);
}
}
return code;
}
/// <summary>
/// 郵箱隨機字符串
/// </summary>
/// <param name="codeCount"></param>
/// <param name="content"></param>
/// <param name="toMail"></param>
/// <returns></returns>
public bool EmailValidataCode(int codeCount, out string content, string toMail)
{
string code = CreateRandomCode(codeCount);
content = code;
try
{
MailMessage mail = new MailMessage();
//發件人郵箱地址
mail.From = new MailAddress("[email protected]");
mail.To.Add(new MailAddress(toMail));
mail.Subject = "【學員註冊驗證碼】";
mail.Body = $"您本次註冊學員的驗證碼爲【{code}】,如未進行註冊操作請忽略!";
//smtp郵件發送
SmtpClient client = new SmtpClient();
client.Host = " smtp.163.com";//主機ID
client.EnableSsl = true;
//授權碼在每次開啓郵箱的Smtp功能時自動生成的
client.Credentials = new NetworkCredential("[email protected]", "SXNBZRMOUUIXVTMM");//授權碼使用開啓pop3獲取
client.Send(mail);
return true;
}
catch (Exception ex)
{
return false;
}
}
}
}
2.控制器文件中
/// <summary>
/// 郵箱驗證頁面
/// </summary>
/// <param name="Emailcode">需驗證的字符串</param>
/// <returns></returns>
public ActionResult EmailCode(string Emailcode)
{
if (Emailcode.Equals(TempData["codevalidata"]))
{
return Content("註冊成功!");
}
else
{
return View();
}
}
/// <summary>
/// 發送郵件(通過獲取Email參數爲郵箱ID)
/// </summary>
/// <returns></returns>
public ActionResult SendEmail()
{
string Email = Request["Email"];
CreateValidateCode validateCode = new CreateValidateCode();
string code = "";
if (validateCode.EmailValidataCode(6,out code,Email))
{
TempData["codevalidata"] = code;
// 郵件發送 成功,使用路由規則觸發控制器中的EmailCode動作方法
return View("EmailCode");
}
else
{
//郵件發送失敗
return JavaScript("alert('郵件發送失敗!請稍後再試!')");
}
}
HTMLHelper總結參考:https://www.cnblogs.com/JoeSnail/p/7724341.html