添加其他参数以表单提交

时间:2012-10-31 16:44:20

标签: asp.net-mvc forms razor

我的Razor视图中有一个表单声明

<form method="post" action="/Lot/LotList?auctionEventId=@auctionEventId" id="filterForm">

(顺便说一句,我选择这样写出来而不是使用Html.BeginFrom,因为我需要给它一个id并且不知道如何使用Html.BeginFrom - 但这不是这里的问题)

在此表单之外,我有一个提交此表单的按钮(表单中还有一个提交按钮)

<input type="button" onclick="$('#filterForm').submit();" value="Show all" />

现在,问题是如果使用此按钮提交表单,我希望表单中的操作更改为

action="/Lot/LotList?auctionEventId=@auctionEventId&showAll=true"

如何更改操作并传递此附加参数?有没有更好的方法来做这一切?

6 个答案:

答案 0 :(得分:35)

将查询字符串参数附加到表单操作上,并尝试在运行时更改它是棘手的(但并非不可能)。使用隐藏字段要容易得多:

<form method="post" action="/Lot/LotList" id="filterForm">
  <input type="hidden" name="auctionEventId" value="@auctionEventId" />
  ...

所以现在你所要做的就是为“showAll”添加另一个隐藏字段

<form method="post" action="/Lot/LotList" id="filterForm">
  <input type="hidden" name="auctionEventId" value="@auctionEventId" />
  <input type="hidden" name="showAll" value="false" id="showAllField" />
  ...

然后在showAll按钮上挂上一个jquery事件:

<input id="showAllButton" type="button"/>

jQuery的:

$('#showAllButton').click(function(){
     $('#showAllField').val("true");
     $('#filterForm').submit();
});

答案 1 :(得分:5)

如何放置隐藏的输入

<form method="post" action="/Lot/LotList?auctionEventId=@auctionEventId" id="filterForm">

<input type="hidden" id="showAll" name="showAll" value=""/>
按钮上的

<input type="button" onclick="submitForm()" value="Show all" />

在你的脚本上某处

function submitForm(){
$('#showAll').val('true');
$('#filterForm').submit();

}

答案 2 :(得分:5)

我知道你说这不是问题,但你可以像Html.BeginForm这样添加属性:

 @using (Html.BeginForm("ActionName","ControllerName", FormMethod.Post, new { id = "filterform" })){

答案 3 :(得分:4)

如果您在表单中,则可以将路由添加到按钮元素。您可以使用formAction和formMethod覆盖表单的本机操作。您还可以使用其他formActions和formMethods

的多个按钮

<form action="/somewhere" method="get">
    <input type="type" name="name" value=" " />


    <button formaction="/Lot/LotList?auctionEventId=@auctionEventId&showAll=true" formmethod="post">Show All</button>
</form>

答案 4 :(得分:0)

你好我发现这个工作得很好

 @using (Html.BeginForm("ActionName","ControllerName",  new { id = "filterform" },FormMethod.Post)){

我已经厌倦了在param之前做'FormMethod.Post',但是它没有用,也从未传递过值。只有通过反复试验才能解决问题并发现它应该像我发布的代码一样。

希望有所帮助

答案 5 :(得分:0)

如果同一表单有多个提交按钮,并且需要为每个按钮传递不同的参数,则可以使用asp-route属性来完成此任务。

 <input type="submit" value="Save"/>

 <input id="btnComplete" type="submit"
        asp-route-addNewOneAfterSave="@true"
        value="Save And Create New One">

仅记得在OnPost方法中使用参数,例如:

public async Task<IActionResult> OnPostAsync(bool? addNewOneAfterSave)
        {
             //Your code ....
        }

您可以从此article.

中了解有关asp-route锚标记帮助器的更多信息。