Как оставить параметры URL незавершенными в ASP.NET MVC?

Спасибо всем большое! Это действительно помогло.

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>




<nav class="navbar fixed-top navbar-expand-lg navbar-light" style="background-color: #ffffff;">
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <div class="collapse navbar-collapse" id="navbarNav">
    <ul class="navbar-nav">
      <li class="nav-item active">
        <a class="nav-link" href="index.html">Home <span class="sr-only"> 
    (current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="portfolio.html">Portfolio </a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="about.html">About </a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="contact.html">Contact </a>
      </li>
    </ul>
  </div>
  <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
    <a href="#"></a>    
    <h1>HEY HEY HEY!<br/><i class="fas fa-yin-yang fa-spin"></i></h1>
  </div>
</nav>

7
задан Todd 5 February 2009 в 03:36
поделиться

5 ответов

Я понимаю один из комментариев о кодировании случая по причине; это только было бы исключением, не правилом.

Вот то, что я соединил, как это может быть улучшено?

    public static string ActionLinkNoEscape(this HtmlHelper html, string linkText, string actionName, string controllerName, object values, object htmlAttributes)
    {
        RouteValueDictionary routeValues = new RouteValueDictionary(values);
        RouteValueDictionary htmlValues = new RouteValueDictionary(htmlAttributes);

        UrlHelper urlHelper = new UrlHelper(html.ViewContext.RequestContext, RouteTable.Routes);
        string url = urlHelper.Action(actionName, controllerName);
        url += "?";
        List<string> paramList = new List<string>();
        foreach (KeyValuePair<string, object> pair in routeValues)
        {
            object value = pair.Value ?? "";
            paramList.Add(String.Concat(pair.Key, "=", Convert.ToString(value, CultureInfo.InvariantCulture)));
        }
        url += String.Join("&", paramList.ToArray());

        TagBuilder builder = new TagBuilder("a");
        builder.InnerHtml = string.IsNullOrEmpty(linkText) ? "" : HttpUtility.HtmlEncode(linkText);
        builder.MergeAttributes<string, object>(htmlValues);
        builder.MergeAttribute("href", url);
        return builder.ToString(TagRenderMode.Normal);
    }
1
ответ дан 7 December 2019 в 03:21
поделиться

Как я заставляю это не выходить из значения returnurl

Как об этом?

var url = Url.Action("Login", "Account", new {returnurl = Request.Path});
var unEncodedUrl = HttpUtility.UrlDecode(url);
Response.Write("<a href='" + unEncodedUrl + "'>...</a>");

Убедитесь, что это - то, что Вы хотите, хотя, кодирование URL имеет свою цель.

7
ответ дан 7 December 2019 в 03:21
поделиться

Мой solutionto подобная проблема должен был записать мое собственное расширение. После рытья вокруг в коде я не мог найти способ сделать это иначе. Ваш мог бы быть похожим на это.

public static class HtmlHelperExtensions
{
    public static string LoginLinkWithReturnUrl( this HtmlHelper helper,
                                                 string linkText,
                                                 string action,
                                                 string controller,
                                                 string returnUrl,
                                                 object htmlAttributes )
    {
         TagBuilder builder = new TagBuilder("a");
         builder.Attributes.Add( "href",
                                  string.Format( "/{0}/{1}?returnurl={2}",
                                                 controller,
                                                 action,
                                                 returnUrl ) );
         var attrDict = new RouteValueDictionary( htmlAttributes );
         builder.MergeAttributes( attrDict );
         builder.InnerHtml = linkText;
         return builder.ToString();
    }
}

Я думаю, что у меня была та же проблема при создании и использовании UrlHelper, таким образом, я пошел со строкой. Механизм формата вместо этого. YMMV.

0
ответ дан 7 December 2019 в 03:21
поделиться

Параметр весьма завершен. Вы заметите URL:

http://stackoverflow.com/users/login?returnurl=%2fquestions%2fask

действительно на самом деле работает - ТАК читает и не выходит из того параметра как нормального. Если бы Вы хотели включать другой за пределы символы, такие как '& то ', в параметре необходимо было бы все еще выйти из них.

Прием просто, что '/' символ в особенности не должен быть % - вышел в параметрах запроса. Этого действительно нужно оставить в других контекстах такой как в части пути, таким образом, URLEncode всегда кодирует его, для сейфа.

Если Вы просто хотите, чтобы URL выглядел более симпатичным, просто вышел из параметра как нормального (который необходимо сделать для выхода из всех других символов, которые должны быть обработаны правильно), и затем сделайте строковую замену на '%2f' с '/'.

1
ответ дан 7 December 2019 в 03:21
поделиться

Я не полагаю, что существует путь вокруг этого, это встроено в платформу. Фактическая конструкция URL происходит в Системе. Сеть. Маршрутизация. ParsedRoute. Свяжите метод и нет никаких условий, используемых для предотвращения выхода.

Похож на дополнительный метод, способ пойти, но тот, который немного более устойчив, чем тот, упомянутый ранее.

0
ответ дан 7 December 2019 в 03:21
поделиться
Другие вопросы по тегам:

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