[英]Html.ActionLink dynamic parameter
我有一个下拉列表,并且下拉列表旁边有一个链接。 单击按钮后,我希望在控制器上调用一个动作,以便可以通过下拉列表中选择的SelectedFileId
下载文件。 问题是,当我在控制台中查看链接URL时,它只是
http://localhost/Download/DownloadFileById
这不包括我的参数。 我认为这是因为生成html时Model.SelectedFileId
为null。 有没有一种方法可以使该URL动态并在更改下拉列表时进行更改?
我的代码:
@Html.DropDownListFor(x => x.SelectedFileId, Model.FileIds)
@Html.ActionLink("Download File",
"DownloadFileById",
"Download",
new { fileId = Model.SelectedFileId })
如果我对问题的理解正确,则希望能够在下拉列表中选择一个项目,并将该值作为参数传递给服务器端操作。
没有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,该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相同的操作,但是要动态选择下拉列表中的任何值。
您为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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.