none
mvc 5 razor text string and actionlink to html RRS feed

  • Вопрос

  • Добрый день, подскажите

    есть строка в формате string (парсер с сайта) ее необходимо отобразить как html на странице сайта при этом сделать замену  a href ссылки на @Ajax.ActionLink. Если без замены то делал просто @Html.Raw() и все работало, если просто добавить @Ajax.ActionLink, то все будет отображаться как "сайт" только мой линк будет как текст

    <a href=\"/home/index123\">
    <div class=\"hero\"\">
    <div class=\"name\">anyname</div>
    <div class=\"mask\">
    </div><div class=\"notes\">
    <div class=\"note-symbol\" rel=\"tooltip\" title=\"1111111\">
    <i class=\"fa fa-star\"></i>
    </div></div></div></a>

    Другими словами нужно из вот этого получить веб вид

    string mystrintohtml = "@Ajax.ActionLink(\"Abaddon\", \"Index\",\"Heroes\", new AjaxOptions { UpdateTargetId = \"bestbook\" })";
    
    @Html.Raw(mystrintohtml) //не просто текст, а сработал как хэлпер для Razor


    • Изменено SanteR_ 16 ноября 2016 г. 13:13 добавил описание
    16 ноября 2016 г. 11:59

Ответы

  • Хотелось вместо кода приведенного ниже, использовать просто хэлпер Ajax.ActionLink.

    <script type="text/javascript">
        $(document).ready(function () {
            $('.hero-grid a').click(function (e) {
                e.preventDefault();
                var name = $('a').val();
                var sss = this.outerText;
                name = encodeURIComponent(sss);
                $('#results').load('@Url.Action("Index", "Heroes")?name=' + name);
            });
        });
    </script>

    • Помечено в качестве ответа SanteR_ 18 ноября 2016 г. 9:34
    18 ноября 2016 г. 9:34

Все ответы

  • Здравствуйте,

    Может я не совсем Ваш вопрос понял, но может хэлпер предложенный здесь поможет:

    Raw ActionLink linkText


    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    17 ноября 2016 г. 8:06
    Модератор
  • Суть такая, из контроллера в вьюшку передаю строку текстовую в которой используется заготовка для будущего хэлпера для Razor

    // Контроллер
    {string mystringtohtml = "@Ajax.ActionLink(\"Abaddon\", \"Index\",\"Heroes\", new AjaxOptions { UpdateTargetId = \"bestbook\" })";
    ViewBag.Mystring = mystringtohtml;
    return View()
    }
    // Представление
    {
    @Html.Raw(mystringtohtml) //не просто текст, а сработал как хэлпер для Razor, в этой сроке есть 
    }
    Почему именно Html.Raw() - потому что моя строка mystringtohtml содержит часть спарсенной страницы веб сайта и сохранённая в строку, там я делаю изменения и отображаю в своем преставлении.


    • Изменено SanteR_ 18 ноября 2016 г. 4:17 подробное описание
    18 ноября 2016 г. 4:14
  • Как-то вы не стандартно работаете с Html хелперами. Они не предназначены для такого использования. Может быть проше сделать по-другому? Например, передавать html-строку из контроллера в представление, в представлении заменять существующие ссылки на нужные и показывать результат через Html.Raw.

    Примерно так будет выглядеть в коде:

    Контроллер:

    public ActionResult Index()
            {
                ViewBag.HtmlString = @"
                    <ul>
                        <li><a href=""microsoft.com"">microsoft.com</a></li>
                        <li><a href = ""google.com"" >google.com</a></li>
                    </ul>";
                return View();
            }

    Представление:

    <div>
        @using System.Text.RegularExpressions;
        @{
            var link = Ajax.ActionLink("Abaddon", "Index", "Heroes", new AjaxOptions { UpdateTargetId = "bestbook" });
            var updatedHtmlString = Regex.Replace(ViewBag.HtmlString, "<a.+?>.*?</a>", link.ToHtmlString());
        }
        @Html.Raw(updatedHtmlString)
    </div>


    18 ноября 2016 г. 9:20
  • Хотелось вместо кода приведенного ниже, использовать просто хэлпер Ajax.ActionLink.

    <script type="text/javascript">
        $(document).ready(function () {
            $('.hero-grid a').click(function (e) {
                e.preventDefault();
                var name = $('a').val();
                var sss = this.outerText;
                name = encodeURIComponent(sss);
                $('#results').load('@Url.Action("Index", "Heroes")?name=' + name);
            });
        });
    </script>

    • Помечено в качестве ответа SanteR_ 18 ноября 2016 г. 9:34
    18 ноября 2016 г. 9:34