繁体   English   中英

HTML.ActionLink动态参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM