我有一个引导程序模版,其中包含许多按钮,可帮助下载不同格式的文件。当我使用如下设置onclick函数时,我能够输入控制器方法:
onclick="location.href='@Url.Action("DownloadAsJPG", "Home")'"
我想基于按下的按钮进行一些基于条件的文件下载,因此我正在考虑通过设置参数的值属性来传递参数here和here按钮
HTML:
<button type="button" id="tojpg" class="btn btn-outline-primary" value="jpg">JPG</button>
<button type="button" class="btn btn-outline-primary" value="jpgcmyk">JPG-CMYK</button>
<button type="button" class="btn btn-outline-primary" value="jpgrgb">JPG-RGB</button>
控制器方法中的参数始终为null。我不确定我错过了什么。
控制器方法:
public FileResult DownloadAsJpg(string argument)
{ Some action }
我试图玩一个我在stackoverflow问题上发现的jquery,但这个问题也无济于事,我无法使用此jquery到达控制器。
jQuery
$('#tojpg').click(function (e) {
e.preventDefault();
window.location = '/Home/DownloadAsJpg?argument=' + $('#tojpg').val();
});
任何提示将不胜感激。
答案 0 :(得分:1)
如果可以通过
与您的控制器联系,onclick="location.href='@Url.Action("DownloadAsJPG", "Home")'"
,只想传递一些参数。您可以像
onclick="location.href='@Url.Action("DownloadAsJPG", "Home", new { argument = "tojpg" })'"
或借助Jquery事件
编辑
尝试将事件包装到$(document).ready()
中。根据我的经验,大多数情况下,无法进行事件的原因是事件绑定发生时尚未创建按钮。
$(document).ready(function() {
$('#tojpg').click(function (e) {
e.preventDefault();
location.href = '@Url.Action("DownloadAsJPG", "Home", new { argument = "tojpg" })';
});
}
如果您不想为每个按钮选项编写单独的事件,则可以创建类似这样的内容。
<button type="button" class="btn btn-outline-primary" value="jpg">JPG</button>
<button type="button" class="btn btn-outline-primary" value="jpgcmyk">JPG-CMYK</button>
<button type="button" class="btn btn-outline-primary" value="jpgrgb">JPG-RGB</button>
和这样的Jquery事件
$(document).ready(function() {
$('.btn').click(function () {
location.href = '@Url.Action("DownloadAsJPG", "Home", new { argument = "'+ $(this).attr("value") +'" })';
});
}
应该可以。
答案 1 :(得分:1)
有两种解决方法:
选项1
<button />
不属于表单要发布的数据。这就是为什么它不会在服务器端出现。您应该将其更改为如下输入:
<input type="submit" name="argument" value="jpg" />
此字段的名称应与操作中参数的名称相同。由于这是一个input
字段,因此浏览器会将其与整个帖子一起发送。这就是您所引用的帖子中要做的事情。
选项2
如果您想改用window.location
,则需要确保该操作允许执行GET请求,并且您将argument
作为查询字符串传递:
onclick="location.href='@Url.Action("DownloadAsJPG", "Home", new { argument = "jpg" })'"