我有一个下拉列表和一个链接旁边的下拉列表。单击按钮时,我希望在控制器上调用一个操作,以便通过下拉列表中选择的SelectedFileId下载我的文件。问题是,当我在控制台中查看链接url时,它只是
http://localhost/Download/DownloadFileById不包括我的参数。我认为这是因为在生成html时,Model.SelectedFileId是空的。有什么方法可以让这个URL成为动态的,并且每当我改变下拉列表时改变它呢?
我的代码:
@Html.DropDownListFor(x => x.SelectedFileId, Model.FileIds)
@Html.ActionLink("Download File",
"DownloadFileById",
"Download",
new { fileId = Model.SelectedFileId })发布于 2014-05-15 19:23:31
如果我正确理解这个问题,您希望能够在下拉列表中选择一个项,并将该值作为参数传递给您的服务器端操作。
没有javascript,这是行不通的。设置Model.SelectedFileId只会在页面呈现时设置FileId值。之后是客户端,这意味着您将需要javascript。
最简单的方法是一个简单的javascript方法。不要使用ActionLink,而是创建一个基本的html链接或按钮,并给它一个onclick处理程序。
@Html.DropDownListFor(x => x.SelectedFileId, Model.FileIds, new {id = "FileDownloadList"}) //Give this an id so you can select it later. Also assuming FileIds is a SelectList.
<input type=button onclick="DownloadFile" value="Download File"/> 然后,您需要编写javascript,它接受所选的id并将其发送到操作方法服务器端。我不打算使用ajax,因为我不认为您可以使用ajax下载文件。但是,您可以做ActionLink应该做的事情,并将浏览器引导到您的文件中。
function DownloadFile(){
var fileID = $("#FileDownloadList").val(); //Get selected FileID
window.location = "http://localhost/Download/DownloadFileById?fileId=" + fileId; //Redirect to file. I am using the full path, but you could use a relative path.
}这应该执行与ActionLink相同的操作,但是动态地选择下拉列表中的任何值。
发布于 2014-05-15 19:01:46
您对ActionLink使用了错误的重载。你用的是这一个
看起来就像
public static MvcHtmlString ActionLink(
this HtmlHelper htmlHelper,
string linkText,
string actionName,
Object routeValues,
Object htmlAttributes
)但是你想要这一个,它看起来像:
@Html.ActionLink("Download File",
"DownloadFileById",
"Download",
new { fileId = Model.SelectedFileId },
null)https://stackoverflow.com/questions/23686506
复制相似问题