【问题标题】:ASP MVC Passing value into modal windowASP MVC 将值传递到模式窗口
【发布时间】:2015-09-22 10:48:32
【问题描述】:

我有一个带有模式窗口的视图。当我单击打开模态窗口时,我想将参数item.InstrumentId 传递到模态窗口,以便我可以单击一个链接,将我从属于 InstrumentId 的特定工具重定向到页面。我在下面所做的成功地将 InstrumentId 传递到窗口中,但问题是我不知道如何将该值传递到 Html.ActionLink。关于如何进行的任何提示?

   @foreach (var item in Model)
    {
        <li class="list-group-item">
            <div class="row">
                <div class="col-md-4">
                    <h4>
                        Instrument: @item.InstrumentId
                    </h4>
                </div>
                <div class="col-md-4">
                    @item.Type
                </div>
                <div class="col-md-4">
                    <!-- Button trigger modal -->
                    <button type="button" class="open-dialog btn btn-primary btn-sm" data-toggle="modal" data-target="#myModal" data-id="@item.InstrumentId">
                        View details
                    </button>

                    <script type="text/javascript">
                        $(document).on("click", ".open-dialog", function() {
                            var modalId = $(this).data('id');
                            $(".modal-dialog #myModal").val(modalId);
                        })
                    </script>
                    <!-- Modal -->
                    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
                        <div class="modal-dialog" role="document">
                            <div class="modal-content">
                                <div class="modal-header">
                                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                                    <h4 class="modal-title" id="myModal"></h4>
                                </div>
                                <div class="modal-body">
                                    @item.Message
                                    <br/> <br/> <br/>
                                    <div class="row">
                                        <div class="col-md-4">
                                            Slide: <a href="/Home/Slide" class="Button">1234500323</a>
                                        </div>
                                        <div class="col-md-4">
                                            Instrument: @Html.ActionLink(item.InstrumentId, "Instrument", new {instrumentid = item.InstrumentId})
                                        </div>
                                        <div class="col-md-4">
                                            Checked: @item.Checked
                                        </div>
                                    </div>
                                </div>
                                <div class="modal-footer">
                                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                                    <button type="button" class="btn btn-primary">Save changes</button>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </li>
    }

更新

<div>
<ul class="list-group">
    @foreach (var item in Model)
    {
        <li class="list-group-item">
            <div class="row">
                <div class="col-md-4">
                    <h4>
                        Instrument: @item.InstrumentId
                    </h4>
                </div>
                <div class="col-md-4">
                    @item.Type
                </div>
                <div class="col-md-4">
                    <!-- Button trigger modal -->
                    <button type="button" class="open-dialog btn btn-primary btn-sm" data-url="@Url.Action("Instrument", new {instrumentid = @item.InstrumentId})">
                        View details
                    </button>

                    <script type="text/javascript">
                        $(document).on("click", ".open-dialog", function() {
                            $('#details').attr('href', $(this).data('url')); // update the links url
                        });
                    </script>
                </div>
            </div>
        </li>
    }
</ul>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            </div>
            <div class="modal-body">
                @*@item.Message*@
                <br /> <br /> <br />
                <div class="row">
                    <div class="col-md-4">
                        Slide: <a href="/Home/Slide" class="Button">1234500323</a>
                    </div>
                    <div class="col-md-4">
                        Instrument: <a id="details" href="#">Details</a>
                    </div>
                    <div class="col-md-4">
                        Checked: @*@item.Checked*@
                    </div>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                <button type="button" class="btn btn-primary">Save changes</button>
            </div>
        </div>
    </div>
</div>

【问题讨论】:

  • 带有id="myModal" 的元素是&lt;h4&gt;,所以$(".modal-dialog #myModal").val(modalId); 不可能工作,尽管你声称是这样。
  • 您是在循环执行此操作吗?既然Html.ActionLink() 你已经有了new { instrumentid = item.InstrumentId },你为什么需要传递它已经拥有的相同的值?
  • 是的,我正在循环执行此操作。

    不显示任何内容,但如果我在其中放置类似 元素的内容,我可以在模式窗口中显示该值。事情是,我有一个仪器。每个仪器都有一个按钮,用于查看有关该仪器的详细信息。我之所以需要传递值,是因为我需要从我点击的特定仪器中传递 id,而 item.InstrumentId 只从列表中的第一个仪器中获取第一个 id。

  • 所以按钮是循环的,但模态的不是?
  • 好吧,一切都在循环中。我已经用添加的循环更新了 OP。

标签: javascript asp.net asp.net-mvc


【解决方案1】:

您当前为集合中的每个项目生成一个模式,但给它一个 id="myModal" 这是无效的 html 并且意味着 data-target="#myModal" 只会打开第一个。将模态框移到循环之外,以便您只创建一个(并删除也具有相同 id 属性的 &lt;h4 class="modal-title" id="myModal"&gt;&lt;/h4&gt; 元素)

然后把按钮html改成

<button type="button" class=".." .. data-url="@Url.Action("Instrument", new { instrumentid = item.InstrumentId })">

并将模态中的html更改为

Instrument: <a id="details" href="#">Details</a>

然后把脚本改成

$(document).on("click", ".open-dialog", function() {
    $('#details').attr('href', $(this).data('url')); // update the links url
})

旁注:您可能希望在模态中使用Checked: @item.Checked 做类似的事情

【讨论】:

  • 我已经更新了代码,但现在点击按钮时似乎没有触发模式。我已经更新了 OP。
  • 首先,您的更新显示您的脚本甚至不在$(document).ready() 内 - 所以不可能工作(但无论如何您应该将它移到页面底部)。其次,您删除了data-toggle="modal" data-target="#myModal" 属性-我只是在我的代码中将其替换为...,以突出显示重要的更改:)
  • 天哪,我觉得自己像这样的工具。你是对的。它现在似乎正在工作,我什至在路上学到了很多东西。谢谢!
【解决方案2】:

1.使用ID作为锚链接。
2.注意代码中的这一行&lt;a href='#' id='InstrumentIDLink'&gt;Anchor Link Value=&lt;/a&gt;。它有Anchor Link Value=。当您打开模式时,您可以看到 Anchor Link Value=10320320 并且您也可以检查 href

$('#myModal1').on('show.bs.modal', function(e) {
  var modalId = $(e.relatedTarget).data('id');
  $('#InstrumentIDLink').attr('href', 'url+'+ modalId)
  $('#InstrumentIDLink').text('Anchor Link Value='+ modalId);

})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.1/css/bootstrap.css" rel="stylesheet" />
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<div class="container">
  <h3>Modal Example</h3>
  <!-- Button to trigger modal -->
  <div> <a href="#myModal1" class='open-dialog' role="button" 
           class="btn" data-toggle="modal" data-id='10320320'>Launch Modal (10320320)</a><br/>
    <a href="#myModal1" class='open-dialog' role="button" 
           class="btn" data-toggle="modal" data-id='10320321'>Launch Modal (10320321)</a>
  </div>
  <!-- Modal -->
  <div id="myModal1" class="modal hide" tabindex="-1" role="dialog">
    <div class="modal-header">
      <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
    </div>
    <div class="modal-body"> <a href='#' id='InstrumentIDLink'>Anchor Link Value=</a>

    </div>
    <div class="modal-footer">
      <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
      <button class="btn btn-primary">Save changes</button>
    </div>
  </div>
</div>

从 bootstrap 3+ 开始,您可以使用 e.relatedTarget 获取触发模式的元素

【讨论】:

    【解决方案3】:

    仪器:

    @Html.ActionLink("Link_Text", "Action_Name", "Controller_Name", new { id=item.InstrumentId})
    

    现在你可以在你的控制器中访问这个值

    public ActionResult Action_Name(int id)
    {
        //Do something
        return view();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多