我正在一個網站上工作,員工有一個Gmail或雅虎的電子郵件,這決定了他們得到的手機的類型。如果他們進入Gmail賬戶,某些類型的電話(iPhone,Galaxy,Samsung等)應該出現在下拉列表中。同樣應該爲雅虎帳戶工作。 Gmail帳戶的電話類型多於雅虎帳戶。我拿到了文本框並下拉框工作。不過,我需要幫助編寫一個函數來說明gmail或yahoo之間的區別,以確定在用戶輸入電子郵件域時顯示哪些類型的電話。不知道是否需要執行switch語句或正則表達式匹配。如何在用戶輸入電子郵件時驗證電子郵件域名地址以顯示某些項目以顯示在下拉列表菜單中?
控制器代碼如下:
[Display(Name = "Email Address")]
[RegularExpression(@"^([a-zA-Z0-9._%+-]{1,50})+(@gmail|@GMAIL|@YAHOO|@yahoo)+(\.)+(com|COM)$",
ErrorMessage = "Invalid Email Format. Use: [email protected] or [email protected]")]
[Required(ErrorMessage="Please input gmail or yahoo")]
public string Email { get; set; }
視圖代碼如下:從用戶輸入
<div class="col-lg-2 col-md-3 col-sm-3">
@Html.EditorFor(model => model.Email,
new { htmlAttributes =
new {
@class = "form-control",
@placeholder = "[email protected] or [email protected]",
data_bind = "value: Request.Email",
data_toggle = "tooltip",
data_placement = "top",
title = "Requestor's Email" }
})
@Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
</div>
dropdowncascade.js //獲取信息
$(document).ready(function() {
$("#Carriers").change(function() {
var carrierId = $(this).val();
var emailAddress = $("#Email").val();
$.getJSON("../Home/LoadPhonesByCarrierId", { carrierid: carrierId, emailaddress: emailAddress }, //reads what carrier id and the email from the user input
function (phonesData, accsData) {
var select = $("#Phones");
select.empty();
select.append($('<option/>', {
value: 0,
text: "Select a Phone"
}));
$.each(phonesData, function (index, itemData) {
select.append($('<option/>', {
value: itemData.Value,
text: itemData.Text
}));
});
});
});
幫助與HomeControllers功能的.cs! //需要匹配電子郵件域以確定在下拉列表中顯示哪些電話類型。
public JsonResult LoadPhonesByCarrierId(string carrierid, string email)
{
// string Email = txt.Text;
//The email difference swicth statement
//if(Regex.IsMatch(Email, @"^([a-zA-Z0-9._%+-]{1,50})(@gmail|@GMAIL)(\.)(com|COM)$"))
string pattern = @"^([a-zA-Z0-9._%+-]{1,50})(@gmail|@GMAIL)(\.)(com|COM)$";
string input = "[email protected]";
Match match = Regex.Match(input, pattern);
if (match.Success)
{
var com = from c in db.Phones
where c.CommerceAllowed == true
select c;
}
else
{
var gov = from g in db.Phones
where g.GovAllowed == true
select g;
}
var phonesList = this.GetPhones(Convert.ToInt32(carrierid));
var phonesData = phonesList.Select(m => new SelectListItem()
{
Text = m.Name,
Value = m.PhoneID.ToString(),
});
return Json(phonesData, JsonRequestBehavior.AllowGet);
}
我沒有電子郵件數據庫。我需要弄清楚如何在switch語句或if-else語句中編寫正則表達式。如果這在正則表達式中甚至是可能的。在控制器視圖中,我使用正則表達式來確定它是否是有效的電子郵件地址。因此,在homecontrollers.cs文件中,我需要它來檢查它是否是yahoo或gmail域,它將轉到數據庫並收集要顯示的電話類型。 – Sandy2016
@ Sandy25:你錯過了這個答案的要點。這將是使用'[RegularExpression]'屬性的替代方法。無論如何,這是對屬性的不好使用。它旨在驗證一般格式,而不是內容。無論如何,通過這裏的答案,您可以輕鬆驗證地址是否以有效域的可配置列表結尾(以防您需要稍後添加更多內容)。然後您只需通過'ModelState.AddModelError(「Email」,「無效的電子郵件提供商。」)手動將錯誤添加到'ModelState'。 –
你甚至可以通過創建一個自定義驗證屬性來提供這個驗證。 –