В MVC View в представлении ссылка отображается как текст [дубликат]

error_reporting(E_ALL | E_STRICT);

И включите ошибки отображения в php.ini

3
задан Jan Deinhard 8 October 2013 в 08:04
поделиться

4 ответа

Нет такого помощника, но вы можете создать свой собственный пользовательский помощник или создать шаблон для помощника DisplayFor , который будет содержать нужную вам логику.

2
ответ дан Alex 20 August 2018 в 23:07
поделиться

У меня были некоторые проблемы с решением:

  1. Он не работал для имен хостов без точек, таких как localhost или любой другой LAN-URL
  2. Он не работал для URL-адреса с пробелами (незначительная проблема)
  3. Он не кодировал все остальные мои данные. Поэтому, если в базе данных есть «& lt;!», Страница будет усечена.
  4. URI не экранирован

Я использовал код сверху , немного расширил его и закончил с этим:

private static readonly Regex urlRegEx = new Regex(@"(?<!="")((http|ftp|https|file):\/\/[\d\w\-_]+(\.[\w\-_]+)*([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?)");
private static readonly Regex quotedUrlRegEx = new Regex(@"(?<!=)([""']|&quot;|&#39;)((http|ftp|https|file):\/\/[\d\w\-_]+(\.[\w\-_]+)*([\w\-\.,@?^=%&amp;:/~\+# ])*)\1");

public static MvcHtmlString DisplayWithLinksFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression,
    string templateName = null)
{
    var encodedHTML = htmlHelper.DisplayFor(expression, templateName);
    return MvcHtmlString.Create(ReplaceUrlsWithLinks(encodedHTML.ToHtmlString()));
}
private static string ReplaceUrlsWithLinks(string input)
{
    input = input.Replace(@"\\", @"file://").Replace('\\', '/');
    var result = quotedUrlRegEx.Replace(input, delegate(Match match)
    {
        string url = match.Groups[2].Value;
        return String.Format("<a href=\"{0}\">{1}</a>", Uri.EscapeUriString(url), ShortenURL(url));
    });
    return urlRegEx.Replace(result, delegate(Match match)
    {
        string url = match.ToString();
        return String.Format("<a href=\"{0}\">{1}</a>", Uri.EscapeUriString(url), ShortenURL(url));
    });
}
private static string ShortenURL(string url)
{
    url = url.Substring(url.IndexOf("//", StringComparison.Ordinal) + 2);
    if (url.Length < 60)
        return url;
    var host = url.Substring(0, url.IndexOf("/", StringComparison.Ordinal));
    return host + "/&hellip;";
}

Очевидно, что не 100% проверено для всех схем URL, но, похоже, работает нормально.

Пример ввода:

"\\02lanpc\abc\def\Bugs in the database.docx"
http://localhost:81/applications/2/?releaseNumber=1.1&buildNumber=2

Выход:

<a href="file://02lanpc/abc/def/Bugs%20in%20the%20database.docx">02lanpc/abc/def/Bugs in the database.docx</a>

<a href="http://localhost:81/applications/2/?releaseNumber=1.1&amp;buildNumber=2">localhost:81/&hellip;</a>
3
ответ дан DasKrümelmonster 20 August 2018 в 23:07
поделиться

Попробуйте написать свой собственный Html Helper, как показано ниже.

public static string Urls(this HtmlHelper helper, string value)
{  
    var items = value.Split(';'); // use your delimiter
    var sb = new StringBuilder();
    foreach(var i in items)
    {
        if(IsUrl(i)) // write a static method that checks if the value is a valid url
            sb.Append("<a href=\"" + i + "\">" + i + "</a>,");
        else
            sb.Append(i + ",");
    }
    return sb.ToString();
}

И используйте это как

@Html.Urls(myValue)
1
ответ дан Flea777 20 August 2018 в 23:07
поделиться
  • 1
    Это обычный текст. Я не могу использовать формат CSV. Но спасибо за подсказку Html Helper. Наверное, это путь. – Jan Deinhard 7 October 2013 в 10:37
  • 2
    Рад быть полезным. Тем не менее, внутри вашего помощника вы можете использовать RegEx, чтобы заменить каждый url на html-якорь. Это должно быть хорошо и с простым и неструктурированным текстом. – Flea777 7 October 2013 в 10:40

Вы можете использовать @Html.Action(actionName), если текст содержит URL mvc.

0
ответ дан SanketS 20 August 2018 в 23:07
поделиться
  • 1
    В тексте может быть несколько URL-адресов. Я хочу иметь отдельные ссылки для каждого URL-адреса. – Jan Deinhard 7 October 2013 в 10:29
  • 2
    вы можете попробовать обычный якорный тег & lt; a & gt; & lt; / a & gt; вместо HTML-помощника. – SanketS 7 October 2013 в 10:35
Другие вопросы по тегам:

Похожие вопросы: