繁体   English   中英

如何在@ html.ActionLink中将输入值作为参数传递

[英]How to pass Input value as parameter in @html.ActionLink

我想在html.Actionlink中传递输入类型的值,所以我尝试了下面的代码,但它不起作用

      @Html.ActionLink("EXPORT TO EXCEL", "ExportToExcel", "UserManagement", new { @class = "btn btn-primary" },
new { ugid = $("selector").val() }

这是我的控制器

 public void ExportToCSV(int ugid)
        {
            client.Open();
            List<UserObjUserInfo> userlistbyUGID = client.GetUserListByUGID(ugid, "token").ToList();
            client.Close();

            StringWriter sw = new StringWriter();

            sw.WriteLine("\"USER ID\",\"USERNAME\",\"NAME\",\"CREATE DATE\"");

            Response.ClearContent();
            Response.AddHeader("content-disposition", "attachment;filename=Exported_Users.csv");
            Response.ContentType = "text/csv";

            foreach (var user in userlistbyUGID)
            {
                sw.WriteLine(string.Format("\"{0}\",\"{1}\",\"{2}\",\"{3}\"",
                                           user.ugid,
                                           user.username,
                                           user.name,
                                           user.CreateDate));
            }
            Response.Write(sw.ToString());
            Response.End();
        }

您正在将服务器端代码与客户端混淆。 ActionLink是在服务器上呈现的html帮助程序,仅输出锚标记。 在您的情况下,它将产生以下结果:

<a href="UserManagement/ExportToExcel" class="btn btn-primary">EXPORT TO EXCEL</a>

在您的情况下,您需要客户端逻辑来生成正确的链接:

<a href="#" class="btn btn-primary" id="export-btn">EXPORT TO EXCEL</a>
<input type="text" id="ugid">


$(document).ready(function(){        
    $("#export-btn").click(function(event){
       event.preventDefault();
       window.location.href = "@Url.Action("ExportToExcel", "UserManagement")" + "?ugid=" + $("#ugid").val();
    });
})

这是工作提琴

这里的问题是,您正在尝试使用客户端值来整理代码,这里有两个选择

做一个客户端链接而不是像actionlink

var link ="/UserManagement/ExportToExcel?ugid="+$("selector").val();

或尝试类似的方法(如果您坚持不懈)

 "@Html.ActionLink("EXPORT TO EXCEL", "ExportToExcel", "UserManagement", new { @class = "btn btn-primary" })"+"?Yourparam="+$("selector").val();

如果您使用的是视图模型,只需更改htmlattribute和routevalues的位置即可

@Html.ActionLink("EXPORT TO EXCEL", "ExportToExcel", "UserManagement", new { ugid = item.value }, new { @class = "btn btn-primary" })

这将为您提供以下网址

<a href="/UserManagement/ExportToExcel?ugid=whatever">EXPORT TO EXCEL</a‌​>

订单事项:

LinkExtensions.ActionLink

如果要动态生成routeattribute:

<a href="#" onclick="window.location.href='@Url.Action("ExportToExcel", "UserManagement")' + '?ugid=' + $('#ugid').val()">EXPORT TO EXCEL</a>

您可以将ActionLink更改为简单的html超链接标记

<a href="#" class="btn btn-primary" id="btnExport">EXPORT TO EXCEL</a>

并添加Click事件这a标签

 $(document).on('click', '#btnExport',function(e){
           e.preventDefault();
           window.location.href = '@Url.Action("ExportToExcel", "UserManagement")' + '?ugid=' + $("selector").val();
  })

创建一个新类,在其中添加一个方法。

namespace myProject.HelperClasses
{
    public static class myExtensionClass
    {
        public static void WriteLineCSV(this StringWriter sw, params object[] Data)
        {
            StringBuilder sb = new StringBuilder();
            foreach (var str in Data)
            {
                sb.Append(String.Format("\"{0}\",", str));
            }
            sw.WriteLine(sb);
        }
    }
}

Controller添加namespace

using  myProject.HelperClasses

并在ExportToCSV操作方法中添加更改

public class UserManagement: Controller {

    public ActionResult ExportToCSV(int ugid)
            {
                string FileName = "Exported_Users.csv";
                string FilePath = Server.MapPath(Path.Combine("~/ExportFiles", FileName ));
                client.Open();
                List<UserObjUserInfo> userlistbyUGID = client.GetUserListByUGID(ugid, "token").ToList();
                client.Close();

                StringWriter sw = new StringWriter();

                sw.WriteLineCSV("USER ID","USERNAME","NAME","CREATE DATE"); //you don't need to provide "\" every tim. ext. method WriteLineCSV will do it for you.

                Response.ClearContent();
                Response.AddHeader("content-disposition", "attachment;filename=Exported_Users.csv");
                Response.ContentType = "text/csv";

                foreach (var user in userlistbyUGID)
                {
                    sw.WriteLineCSV(user.ugid,user.username,user.name, user.CreateDate);
                }
                Response.Write(sw.ToString());
                Response.End();


               return File(FilePath, "text/csv", FileName);
       }

}

您可以在整个项目中使用扩展方法WriteLineCSV ,并且可以为它提供多个参数,因为它接受参数数组。

扩展方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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