[英]Display HTML 5 Telephone number link in Razor
我有以下问题:
我希望在我的HTML5网页上有一个可点击的电话号码。 通常我会简单地使用
<a href="tel: +123456789"> 123456789 </a>
但在我的情况下,我从数据库中获取数字并访问数字石灰。
到目前为止,代码行看起来像这样:
<a href=""> @Html.DisplayFor(modelItem => item.AD_Tel)</a>
那么如果不是固定数字,如何让href
调用该号码呢?
如果不清楚,请发表评论,我将添加缺失的信息。
你应该能够这样做:
<a href="tel:+@item.AD_Tel">@Html.DisplayFor(modelItem => item.AD_Tel)</a>
更新:
创建一个HtmlHelper扩展方法将允许使用这样的视图:
@Html.TelephoneLink("00000000000")
要么
@Html.TelephoneLink(item.AD_Tel)
扩展代码:
public static MvcHtmlString TelephoneLink(this HtmlHelper htmlHelper, string telephoneNumber)
{
var tb = new TagBuilder("a");
tb.Attributes.Add("href", string.Format("tel:+{0}", telephoneNumber));
tb.SetInnerText(telephoneNumber);
return new MvcHtmlString(tb.ToString());
}
根据hutchonoid的回答:
public static MvcHtmlString TelephoneLinkFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, object htmlAttributes = null)
{
var data = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
var tb = new TagBuilder("a");
tb.Attributes.Add("href", string.Format("tel:+{0}", data.Model));
tb.SetInnerText("" + data.Model);
return new MvcHtmlString(tb.ToString());
}
用法: @Html.TelephoneLinkFor(model => model.PhoneNumber)
延伸@ john-marston的答案,延伸到@Hutchonoid的那个......
可以通过首先通过正则表达式运行数字来改进帮助程序。 这剥夺了任何+
, (
, )
, -
或空格,通常添加到电话号码。 一旦下降到原始数字,就可以添加+,我们也确保它现在是唯一的。
var regEx = new Regex("[^0-9]");
var phoneNumber = regEx.Replace(data.Model.ToString(), "");
tb.Attributes.Add("href", $"tel:+{phoneNumber}");
此外,这是一个.NET核心版本
using System;
using System.Linq.Expressions;
using System.Text.Encodings.Web;
using System.Text.RegularExpressions;
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.ViewFeatures.Internal;
namespace Microsoft.AspNetCore.Mvc.Rendering
{
public static class HtmlHelpers
{
public static IHtmlContent TelephoneLinkFor<TModel, TValue>(this IHtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression)
{
var data = ExpressionMetadataProvider.FromLambdaExpression(expression, helper.ViewData, helper.MetadataProvider);
var tb = new TagBuilder("a");
var regEx = new Regex("[^0-9]");
var phoneNumber = regEx.Replace(data.Model.ToString(), "");
tb.Attributes.Add("href", $"tel:+{phoneNumber}");
tb.InnerHtml.Append("" + data.Model);
var stringWriter = new System.IO.StringWriter();
tb.WriteTo(stringWriter, HtmlEncoder.Default);
var tagAsString = stringWriter.ToString();
return new HtmlContentBuilder().SetHtmlContent(tagAsString);
}
}
}
仍然使用@Html.TelephoneLinkFor(x => x.PhoneNumber)
你有没有先把变量放在一个变量中并把它放在href =“HERE”中?
<a href="@Html.DisplayFor(modelItem => item.AD_Tel)"> 123456789 </a>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.