【问题标题】:Passing the data-id from anchor tag to html.beginform将数据 ID 从锚标记传递到 html.beginform
【发布时间】:2017-08-24 21:40:38
【问题描述】:

我有一张桌子,这张桌子的<tbody> 正在从模型的列表中填充。

列表中的每个项目都有 id,这些项目被分配给锚标记中的 data-id

<tbody>                       

    @foreach (var item in Model.eList.ToList())
    {                               
        <tr>
            <td><a href="@Url">@item.FullName</a></td>
            <td>@item.Title</td>
            <td><a data-id="@item.Id" data-open="Event">Event</a></td>
        </tr>
    }

</tbody>

我有这样的带有 Id 事件的 div

<div id="Event" class="reveal" data-reveal>
    @using (Html.BeginForm("Cancel", "Profile", new { id = data-id}, FormMethod.Post))
    {
        <label>confirm</label>
        <input type="submit" value="Save" class="button" id="Edits" />          
    }
</div>

当用户单击锚标记时,它将打开带有id="Event" 的 div。但是如何使用id="Event" 将该特定记录的数据ID 传递给div,从那里它将被发布到控制器并取消操作。

谢谢

【问题讨论】:

    标签: c# asp.net-mvc-4 razor


    【解决方案1】:

    您可以在该表单中保留一个隐藏的输入元素。

    <div id="Event" class="reveal" data-reveal>
        @using (Html.BeginForm("Cancel", "Profile"))
        {
            <input id="dataId" name="id" value="" type="hidden" />
            <label>confirm</label>
            <input type="submit" value="Save" class="button" id="Edits" />          
        }
    </div>
    

    当用户点击锚标签时,从被点击元素的data-id属性中读取值,并将其设置为隐藏元素的值。

    $(function(){
       $("[data-id]").click(function(e){
          e.preventDefault();
          var id=$(this).data("id");
          $("#dataId").val(id);
    
          // your existing code to open the div with form
          / /$("#Event").show();
      });
    
    });
    

    当用户提交表单时,我们为隐藏输入设置的id值也会被提交。

    Here 是一个 js bin 示例。

    【讨论】:

    • 我试图查看 id="Event" 的 div。不显示 div。
    • 对不起!我没有听从你说的话。您是说您无法显示带有 id 事件的 div 吗?根据您的问题,该部分工作正常。(当用户单击锚标记时,它将打开带有 id="Event" 的 div)
    • 是的。抱歉不清楚。您提供的单击列表中的事件的 JsBin 应打开一个模式窗口,该窗口应具有文本框和带有 id 的保存按钮
    • 您目前如何打开模态对话框?你能把它包括在问题中吗
    • 因此,在我的 foreach 循环中,锚标记具有带有“事件”名称的 data-open html 属性,并且当用户单击 div 的锚标记时,我有一个带有“事件”的 div - id “事件”具有数据显示属性,它将打开模式窗口
    【解决方案2】:

    您可以在任何一个中发布 ID -

    1. 查询字符串为new {id = item },或
    2. 隐藏字段为&lt;input type="hidden" name="id" value="@item"&gt;

    例如,

    <tbody>
        @foreach (var item in Model.eList.ToList())
        {
            <tr>
                <td><a href="@Url">@item.FullName</a></td>
                <td>@item.Title</td>
                <td>
                    @using (Html.BeginForm("Cancel", "Profile", new {id = item }, 
                       FormMethod.Post))
                    {
                        <a data-id="@item.Id" data-open="Event">Event</a>
                        <input type="hidden" name="id" value="@item">
                        <div id="Event" class="reveal" data-reveal>
                            <label>confirm</label>
                            <input type="submit" value="Save" class="button" id="Edits" />
                        </div>
                    }
                </td>
            </tr>
        }
    </tbody>
    

    【讨论】:

    • 我试过了,但是在模态弹出窗口中点击提交按钮不会触发控制器动作。
    • 如果使用第一种方法,则需要在Cancel中添加id参数b> 动作方法如果你有视图模型的话。例如,Cancel(ViewModel model, string id) { }
    • 我一直在使用您提供的示例-使用隐藏变量
    • public ActionResult Cancel(int id) { //Some code return RedirectToAction("Profile"); }
    • 取消操作方法的顶部有 [HttpPost] 属性吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 2022-01-27
    相关资源
    最近更新 更多