【问题标题】:Can a single <input> element return more than one value?单个 <input> 元素可以返回多个值吗?
【发布时间】:2015-05-12 03:30:27
【问题描述】:

VS2013、VB、MVC5、html

这些帖子(multiple submitswhich button is pressed)很好地展示了如何在一个表单中使用多个 元素。这对于在列表的每一行末尾包含一个类似的命令非常有用。

我想要一个列出多行并在每行末尾具有相同 元素的页面。当点击特定的时,它必须返回特定于该行并且与点击了哪个链接相关的“控制器方法”信息。所以我的显示将如下所示:

This is line1   LINK1 | LINK2 | LINK3
This is line2   LINK1 | LINK2 | LINK3
This is line3   LINK1 | LINK2 | LINK3

用户点击LINK1、LINK2、LINK3,根据点击的LINK对line1、line2、line3进行操作。操作可能是编辑、删除、列出用户等。

作为示例,控制器方法将需要特定于单击 LINK 所在行的数据,例如记录 ID、记录类型等。可能是该行是由具有不同 ID 的多个表组成的;我只是想确定在控制权转移中需要不止一条信息。

我能否为每个 LINK 提供多条不同的数据,如何提供?我只看到并学习了如何通过检查“ID”属性是否为空,然后根据上面链接的this post 捕获“值”属性中的数据,从元素中将信息返回给控制器。

有没有办法设置一个元素,以便我可以从该特定元素中读取其他数据?信息必须特定于该按钮和该行,这意味着不是整体表单属性。

也许设计上不可能,但我不问也不知道。

【问题讨论】:

  • 我不太明白你的问题,所以一些代码会有所帮助。
  • 您似乎对很多事情感到困惑。例如,我看不到您在问题的任何地方都提到了&lt;input&gt; 元素,它几乎完全是关于链接的。 .. 不是输入元素。
  • @Gergo。我曾认为显示我正在寻找的内容更有用,但我再次合理地提醒一些人发现实际代码更有用,所以,好点。我将在原始帖子中添加内容以使其更清楚。
  • @ErikFunkenbusch。好点也。我将 元素设置为文本,并在我写问题时成为我自己技术的牺牲品。它不是链接,而是看起来像链接的 元素。当我更新上面每个 Gergo 的帖子时,我会添加以澄清。

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


【解决方案1】:

您可以使用一些 ajax 比下面更进一步,但这会解决问题,并允许您使用每个“行”中每个“链接”中的多个值

@using (Html.BeginForm())
{
    @Html.Hidden("myType", "")
    @Html.Hidden("myID","")
} 

This is line1   <a class="action-link" href="#" data-type="typeA" data-id="1">Link 1</a> | <a class="action-link" href="#" data-type="typeA" data-id="2">Link 2</a> | <a class="action-link" href="#" data-type="typeA" data-id="3">Link 3</a> 
This is line2   <a class="action-link" href="#" data-type="typeB" data-id="1">Link 1</a> | <a class="action-link" href="#" data-type="typeB" data-id="2">Link 2</a> | <a class="action-link" href="#" data-type="typeB" data-id="3">Link 3</a> 
etc....

<script>
$(document).ready(function() {
    $(".action-link").on("click", function(e) {
        e.preventDefault();

        var myType = $(this).attr("data-type");
        var myID = $(this).attr("data-id");

        //you could do some validation here...

        $("#myType").val(myType);
        $("#myID").val(myID);

        $("form:first").submit();
    });
});
</script>

【讨论】:

  • 虽然除了在开头列出 html 之外我没有明确说明它,但如果可能的话,我实际上是在尝试用 HTML 来做。但是,这当然是一个不错的选择,从脚本的角度来看,您的明确示例对我非常有用。 +1。
  • 很高兴能帮到艾伦
【解决方案2】:

为什么不添加尽可能多的表格? 比如:

<table>
    @foreach (obj item in Model)        
        {
        @using (Html.BeginForm())
            {
            <tr>
                 <td>
                 // your inputs and buttons here
                 </td>
            </tr>
            }
        } 
<table>

这样每个表单只会发布与您的行相关的数据。

【讨论】:

  • 从技术上讲,这不是有效的 HTML,尽管它通常适用于大多数浏览器...
  • @ErikFunkenbusch 这是正确的,但不是我想指出的。只需远程表格或移动 td 内的表单以使代码符合 HTML。
  • @SmartDev。完美的。我还没有完全熟悉 HTML,并且不知道我可以按照您的建议进行操作,但这正是我正在寻找的解决方案,并且我了解如何对其进行编码。我还知道这是在 Razor 中,将被转换为 HTML。
  • @ErikFunkenbusch。我认为一旦服务器将 Razor 转换为 HTML,它就是一个合法的 HTML 页面。哪些部分不适用于某些浏览器?某些浏览器是否不接受每页多个表单部分?
  • @Alan - Razor 会做任何你告诉它的事情,这并不意味着它是有效的 HTML。在这种情况下,将表单元素放在 tr 元素中是无效的。 tr 中唯一有效的元素是 td 或 th。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
相关资源
最近更新 更多