2015-10-06 4 views
1

Я хочу загрузить Partial View через jQuery и загрузить его на страницу. В частичном представлении есть <img>.MVC JQuery Load Partial с изображением потенциально опасный Запрос

Вот PartialView:

@model NBAPicks.Models.PickedTeamLogoViewModel 

@ViewHelpers.GetTeamLogoForPick(Model.TeamAbbr, Model.GameID, Model.UserName) 

А вот помощник код:

public static MvcHtmlString GetTeamLogoForPick(string abbr, int gameID, string userName) 
{ 
    var imagePath = ImageUrl("Team Logos", abbr + ".gif"); 
    var html = "<img src=\"" + imagePath + "\" id=\"" + gameID.ToString() + "_" + userName + "\" class=\"pick-logo\" />"; 
    return new MvcHtmlString(html); 
} 

Где ImageUrl является:

private static string ImageUrl(string subFolder, string fileName) 
{ 
    return VirtualPathUtility.ToAbsolute(ImagesDir + "\\" + subFolder + "\\" + fileName); 
} 

Вот метод управления:

[Authorize] 
public JsonResult GetPickedTeamLogo(string teamAbbr, int gameID, string userName) 
{ 
    var viewModel = new PickedTeamLogoViewModel() 
    { 
     TeamAbbr = teamAbbr, 
     GameID = gameID, 
     UserName = userName 
    }; 
    return Json(_partialStringRenderer.RenderRazorViewToString(this, "_PickedTeamLogo", viewModel), JsonRequestBehavior.AllowGet); 
} 

А вот где я загрузить его в JQuery:

setTimeout(function() { 
    var ajaxRequest = $.ajax({ 
     type: "GET", 
     url: '@Html.Raw(Url.Content("~/Admin/GetPickedTeamLogo/?teamAbbr="))' + teamAbbr + '&gameID=' + gameID + '&userName=' + userName, 
     cache: false, 
     data: { teamAbbr: teamAbbr, gameID: gameID, userName: userName }, 
     async: false, 
     dataType: 'json', 
     error: function() { 
      console.log('failure'); 
      alert('AJAX fail - this is a bug, report it!'); 
     }, 
     success: function (result) { 
      console.log('AJAX call returned successfully'); 
      console.log('result: ' + result); 
      $("#" + userName + "_logo").load(result); // HERE!!! 
     } 
    }); 
}, 0); 

Теперь через выход консоли HTML, возвращенного выглядит хорошо и правильно:

<img src="/Content/Team Logos/MIA.gif" id="1238_tim" class="pick-logo" /> 

Но консольные сообщения об этой ошибке, когда я пытаюсь и загрузить HTML:

GET http://localhost:53441/%3Cimg 400 (Bad Request)

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

A potentially dangerous Request.Path value was detected from the client (<).

Зачем возникает эта ошибка и как ее решить?

ответ

1

В одном из полей запроса содержится <, инициирующий защиту ASP MVC, предполагая, что пользователь может попытаться отправить тег сценария или что-то еще.

Чтобы решить эту проблему, добавьте действие фильтра в GetPickedTeamLogo действия контроллера:

[ValidateInput(false)] 

Edit: К сожалению, я забыл, вы также должны добавить это в вашей web.config

<httpRuntime requestValidationMode="2.0"/> 

Edit2:

Хорошо, ваша проблема исходит из того, что ваш помощник вернуть вам IMG тег, который вы пытаетесь использовать в качестве URL (результат) в $("#" + userName + "_logo").load(result);

Вы не NEET вызвать нагрузки, а просто добавить изображение, как это:

$("#" + userName + "_logo").append(result); 
+0

Ах, тот же результат, к сожалению. – Hanshan

+0

Выводит ли она ту же ошибку после добавления фильтра в действие GetPickedTeamLogo? –

+0

Да, то же самое. – Hanshan

Смежные вопросы