我有一个路由和Controller和Action组合,通过javascript成功将字符串传递给Action。如果我尝试传递文件名,例如test.png动作没有被击中。
每当传递文件名/路径时,系统都会尝试打开/下载文件 - 这是有意义的。
谷歌搜索建议编辑web.config文件 - 如StackOverflow问题所示:MVC route to capture file name as a parameter。
我不确定这是最好的解决方案 - 它不会影响您可能拥有的任何文件的实际链接 - 或者它是否足够智能以了解您的需求?
我试图创建一个解决方案,我替换了。在test.png到<<dot>>
所以我会通过test<<dot>>png
- 这仍然没有达到我的行动。所以我想我会尝试使用Javascript encodeURIComponent()
对字符串进行编码,但仍然没有触及我的操作 - 不确定原因 - 所有代码都在下面 - 请有人指出我出错的地方 - 或者说我还在考虑使用上面链接的解决方案。
使用Javascript:
$('#imageSelect').on('click', function () {
//pass selected image data to ActionResult function to process and create a div for
//unable to pass file name as it tries to open the file - so replace "." with "<<dot>>" and undo in the Action
var imagePathLocal = $('#tbImagePathLocal').val().replace(".", "<<dot>>");
var encodedImagePathLocal = encodeURIComponent(imagePathLocal);
$.ajax({
async: false,
url: '/Products/FilePath/CreateNewImage/' + encodedImagePathLocal
}).success(function (partialView) {
$('#newImages').append(partialView);
});
});
动作:
public ActionResult CreateNewImage(string filePath)
{
//here I was going to unencode then
//replace the "<<dot>>" with "."
filePath = filePath.Replace("<<dot>>", ".");
}
路线:
routes.MapRoute(
name: "FilePathRoute",
url: "{controller}/FilePath/{action}/{*filePath}",
defaults: new { controller = "Home", action = "Index", filePath = UrlParameter.Optional }
);
重申 - 如果参数是一个字符串,上面的代码将正常工作,例如'test'但是只要我添加文件扩展名'test.png'就会失败。