[英]Can not access variable from @Url.Action
我在ASP.Net MVC页面中有此Javascript
onComplete: function (id, fileName, responseJSON) {
if (responseJSON.success) {
$('#divImgs ul').append(
$('<li>').append(
$('<a>').attr('href',
'@Url.Action("DeleteFile", "Upload", new { id = fileName})').append(
$('<img>').attr('src', responseJSON.filePath))
));
}
}
这给出了编译错误
The name 'fileName' does not exist in the current context
为什么我不能在@Url.Action
访问fileName
变量?
这个问题是@ Url.Action是在服务器端解析的,而filename是客户端上的javascript变量。 您最好打赌是这样的:
onComplete: function (id, fileName, responseJSON) {
if (responseJSON.success) {
$('#divImgs ul').append(
$('<li>').append(
$('<a>').attr('href', '@Url.Action("DeleteFile", "Upload", new { id = "' + filename + '" })').append(
$('<img>').attr('src', responseJSON.filePath))
));
}
}
可能有更好的方法将文件名附加到url,但是这里的想法是从服务器渲染基本url,然后根据需要使用javascript对其进行修改。
编辑:我同意haim77。 您需要将路由呈现给服务器端,而不是仅在客户端附加,以防路由格式改变。 但是在这种情况下,我们需要注入一些JavaScript。 因此,只需将变量注入路由即可将其解析为正确的格式,而且还会输出JavaScript兼容代码。
因为filename
是一个仅存在于客户端的JavaScript变量,所以当View
呈现自身时, @Url.Action
在服务器端执行(之前)。
为了解决这个问题,我通常会做类似的事情:
@object URL_ACTION_PLACEHOLDER = "__MYPLACEHOLDER__";
// ...
onComplete: function (id, fileName, responseJSON) {
if (responseJSON.success) {
var myActionUrl = '@Url.Action("DeleteFile", "Upload", new { id = URL_ACTION_PLACEHOLDER })';
myActionUrl = myActionUrl.replace('@URL_ACTION_PLACEHOLDER', fileName);
$('#divImgs ul').append(
$('<li>').append(
$('<a>').attr('href', myActionUrl).append(
$('<img>').attr('src', responseJSON.filePath))
));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.