繁体   English   中英

在Razor中显示HTML 5电话号码链接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM