使用ActionLink打开Modal并在MVC中传递参数

时间:2014-01-14 12:48:20

标签: javascript jquery asp.net-mvc twitter-bootstrap

我试图通过单击ActionLink并传递如下参数来在同一页面上打开我的引导模式:

@foreach (Items item in Model)
{
  @Html.ActionLink("Download", "#", new { data-id = '@item.Name' } )
}

//Modal
<div id="dModal" class="modal hide fade" aria-hidden="true">
   <div class="modal-body">
      @using (Html.BeginForm("getCSV", "Download", new { filename = data-id }, FormMethod.Post, null))
      {
        <button id="btnCSV" type="submit">Download CSV</button>
      }
      //other options for excel, word etc
   </div>
</div>

在ActionLink中,我将actionName参数保留为#,这是因为模式位于同一页面上,当用户选择模态中的选项时,将决定操作。不直接调用下载操作方法的原因是因为用户可以选择以各种格式下载excel,csv等。

2 个答案:

答案 0 :(得分:2)

这是我使用html.actionlink

显示引导模式形式的方法
@Html.ActionLink("ModalPopUp", "#", new { id = parameter }, new { @data_toggle = "modal", @data_target = "#YourModalId"}) 

答案 1 :(得分:1)

打开引导程序模式对话框不需要您使用ActionLink,正如Adriano上面提到的那样,您会混淆客户端和服务器代码。

可以使用this question中所述的以下选项操纵引导模式。

$('#myModal').modal('toggle');
$('#myModal').modal('show');
$('#myModal').modal('hide');

在您的情况下,您的代码看起来应该是这样的。

@foreach (Items item in Model)
{
  <a href="javascript:void(0);" data-id="@item.Name" class="OpenDialog">Download</a>
}

$(function () {
    $(".OpenDialog").click(function (e) {
        $('#myModal').modal('show');
    });
});

就将数据传递给模态而言,这是一个单独的问题,但涵盖here

基本上,您可以处理click事件并将值放在可见或隐藏的字段中(以适当的为准)。

因此,您可以将上述代码更改为此类

$(function () {
    $(".OpenDialog").click(function (e) {
        $("#myModal #id").val($(this).data("id"));
        $("#myModal").modal('show');
    });
});

现在你有了存储在你的模态中的值,可以根据需要访问它。