从View到Controller的表值(ASP.NET MVC)

时间:2015-04-02 15:12:49

标签: c# asp.net-mvc view controller

我正在使用ASP.NET MVC 5中的一个项目,我在VIEW中有一个TABLE,我通过列表和Viewbag显示ftp文件夹的内容。

我需要表格可点击。我使用了* .js文件,因此行可以点击,但现在我有一个问题,即将文件名(行的值)返回给Controller。

查看代码:

 <table class="row col-md-12 leva table-responsive table-bordered table-hover ">
        <tbody data-link="row" class="rowlink">
            @foreach (var item in ViewBag.files)
            {
                <tr>
                    <td class=" row col-md-12 "><a href="#" target="_blank"> <h5> @item</h5></a></td>

                </tr>
            }
        </tbody>
    </table>

和控制器代码:

 List<string> ftpfiles = new List<string>();
        try
        {
            var ftpco = new Project.Helpers.ftp(@path, name, passwd);
            string[] simpleDirectoryListing = ftpco.directoryListSimple("");


                for (int i = 0; i < simpleDirectoryListing.Count(); i++)
                {
                    if (simpleDirectoryListing[i].Length >= 3)
                    {
                        ftpfiles.Add(simpleDirectoryListing[i]);
                    }

                }
                ViewBag.files = soubory;





        }
        catch { ViewBag.files = "nenacteno"; }

1 个答案:

答案 0 :(得分:2)

当用户点击某行时,不清楚交互应该是什么。你想要吗:

  1. 下载文件并显示预览或内容的Javascript
  2. 允许用户编辑文件
  3. 获取有关文件的元数据
  4. 要定向到下载文件的其他操作方法的用户
  5. 我将为文件下载布置存根,但您可以通过更改操作方法逻辑将其更改为您想要的任何交互。你应该做的是通过URL中的GET传递文件名(因为这是MVC方式)。视图将是(格式化缺少@,因为代码格式化程序目前没有为我提供):

        foreach (var item in ViewBag.files)
        {
            <tr>
                <td>@Html.ActionLink(item, "Download", "YourController", new { id = item }, null)
             </tr>
         }
    

    然后你会在控制器中创建一个带有get参数的动作:

    //
    //GET: /YourController/Download/{id}
    public ActionResult Download(string id)
    {
        //download logic
    }
    

    通过将new { id = item }添加到html帮助器,通过GET将ftp doc名称传递给action方法。在这种情况下,您可以在逻辑中使用名为“id”的字符串来检索文档,或者如果您的原始意图不是下载文档,则可以以类似的方式实现您想要的任何内容。

    顺便说一句,确保使用@Html.ActionLink的正确重载 - 如果你注意到我放了4个参数,null就是最后一个。在MVC5中,他们改变了这一点,如果你没有放第4个参数,你将得到/ controller / action?id = Value而不是URL中的/ controller / action / value。