【问题标题】:Pass additional data with submit button使用提交按钮传递附加数据
【发布时间】:2018-11-12 21:48:42
【问题描述】:

我有表单,有两个按钮:

 <form action="/Book/Crud" method="post">
        <input type="text" name="bookInput" />  
        <button type="submit">Save</button>
        <button type="submit">Save and exit</button>
    </form>

如何将取决于按钮的附加值传递给我的控制器?
&lt;button type="submit" ?????? &gt;Save&lt;/button&gt; 这里应该有什么?

我正在使用带有此控制器的 Asp.Net Core:

public IActionResult Crud(string bookInput)
{
    //removed code for brevity
}

【问题讨论】:

  • 请添加更多信息;添加后端(C#、Wordpress、“IDontKnow”),什么控制器?什么服务器?等等等等
  • @Leon 编辑的问题。

标签: html asp.net-core


【解决方案1】:

你可以使用jquery来解决这个问题:

cshtml

<form action="/Book/Crud" method="post">
        <input type="text" name="bookInput" />  
        <button type="submit" name="Submit">Save</button>
        <button type="submit" name="SubmitAndExit">Save and exit</button>
</form> 

jquery

$("form").submit(function () {
     var btn = $(this).find("input[type=submit]:focus" );
     var btnName = btn.attr('name');
     var input = $("<input>")
           .attr("name", "btnName").val(btnName);
     $(this).append(input);
     return true;
});

【讨论】:

  • 就是答案,唯一的注释是"button[type=submit]:focus"而不是"input[type=submit]:focus"
  • 另外,我们应该如何处理创建的无名输入?
【解决方案2】:

Bobby Jack 的答案是正确的。我将详细说明这个答案,以展示如何从控制器内部访问这个输入。如果您将使用以下 HTML:

<form action="/Book/Crud" method="post">
    <input type="text" name="bookInput" />  
    <button name="action" value="save" type="submit">Save</button>
    <button name="action" value="save-exit" type="submit">Save and exit</button>
</form>

您可以通过在控制器中定义另一个参数来达到以下值:'save' 和 'save-exit':

// The parameter 'action' is what will contain the values specified in the button.
public IActionResult Crud(string bookInput, string action)
{
    // Implementation
}

参数的名称需要与表单按钮的'name'属性中的值对应(本例中为'action')。单击按钮时,ASP.net 会自动将“value”属性的值分配给控制器参数。或者更具体地说,控制器参数“action”将具有从属性“value”检索到的“save”或“save-exit”值。

【讨论】:

    【解决方案3】:
    <form action="/Book/Crud" method="post">
        <input type="text" name="bookInput" />  
        <button name="action" value="save" type="submit">Save</button>
        <button name="action" value="save-exit" type="submit">Save and exit</button>
    </form>
    

    与其他输入一样,按钮可以具有namevalue 属性,这些属性将在提交时提交到您的后端。只有被点击的按钮才会发送它的值。您需要使用您使用的任何机制来访问名为 action 的 POSTed 变量(在此示例中)。然后只需打开它是否等于savesave-exit并执行相关功能。

    【讨论】:

    • 同样的问题:我怎样才能发现服务器端这两个按钮之间的区别?
    • @YuriyN。查看名为 action 的 POSTed 变量的值。如果是“保存”,则按下“保存”按钮。如果是“保存退出”,则按下“保存并退出”按钮。
    • 我不确定如何在 ASP.NET Core 上执行此操作,请您解释一下吗?
    • 我不知道asp.net,恐怕。您还没有处理“bookInput”值吗?应该是完全相同的程序。
    • 是的,已经处理过了,但是这个处理已经是ASP.NET Core内置的了,关于处理button的值,我不确定。
    【解决方案4】:

    添加不同的名称

    <button type="submit" name="save">Save</button>
    <button type="submit" name="saveExit">Save and exit</button>
    

    【讨论】:

    • 我怎样才能发现这些按钮之间的区别?
    【解决方案5】:

    来自 VB.net 的示例:

    <asp:Button id="cmdKeyphraseAdd" runat="server" Text="Add Keyphrase" onclick="cmdKeyphraseAdd_Click"></asp:Button>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 2023-03-26
      • 2019-02-10
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多