我的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"
如何更改操作并传递此附加参数?有没有更好的方法来做这一切?
答案 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锚标记帮助器的更多信息。