我想通过jQuery加载部分视图并将其加载到页面中。部分视图中包含<img>
。
这是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);
}
这是Controller方法:
[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时报告了这个错误:
获取http://localhost:53441/%3Cimg 400(错误请求)
我可以从这里深入研究这个错误:
从客户端(&lt;)中检测到潜在危险的Request.Path值。
为什么会出现此错误,以及如何解决?
答案 0 :(得分:1)
其中一个请求字段包含<
,触发ASP MVC安全措施,认为用户可能会尝试提交脚本标记或其他内容。
要解决此问题,请将此操作过滤器添加到GetPickedTeamLogo控制器操作:
[ValidateInput(false)]
编辑: 对不起,我忘记了,你还必须在你的web.config
中添加它<httpRuntime requestValidationMode="2.0"/>
Edit2:
好的,您的问题来自于您的帮助程序返回一个img标记,您尝试将其用作$("#" + userName + "_logo").load(result);
你不需要调用加载,但只需附加你的图像:
$("#" + userName + "_logo").append(result);