由于我对MVC和Web开发非常陌生,请对我放轻松。
我继承了一个ASP网站,该网站目前只有一个“确定”和“取消”按钮。我需要将“确定”分为两个单独的操作(“添加”和“删除”)。 “取消”仍应将用户重定向回网站首页。
这是cshtml:
<script type="text/javascript">
var dict = {};
function Cancel() {
window.location = "/Home/Index/";
}
</script>
@using (Html.BeginForm("SaveServiceWindow", "Approve", FormMethod.Post, new { name = "SaveServiceWindow" }))
{
<!--
Other form controls
-->
<tr><td>Desired Action:</td></tr>
<tr>
<td align="left" width="300">
<input type="submit" value="Add Group" name="Add" id="submit" />
</td>
<td align="left" width="300">
<input type="submit" value="Remove Group" name="Remove" id="submit" />
</td>
<td align="left" width="300">
<input type="button" value="Cancel" onclick="Cancel();" />
</td>
</tr>
</table>
}
这是Controller方法的声明方式(我不包括方法内容,因为它与问题无关):
[HttpPost]
public ActionResult SaveServiceWindow(FormCollection collection, TemporalApprovalModel approvalInfo)
{
}
我看到一个FormCollection对象正在传递给此方法。我发现this answer看起来确实很有希望,但是,对于如何改造现有代码,我有些困惑:
答案 0 :(得分:1)
您链接到的帖子很旧。现在,假设目标环境支持html属性,则可以使用html属性完成所有工作。通过使用此方法,您可以保留现有参数,而不会遇到任何麻烦。
首先,您需要为每个按钮在控制器上进行操作。
因此,将SaveServiceWindow
分成两个动作,例如AddGroup
和RemoveGroup
。
[HttpPost]
public ActionResult AddGroup(FormCollection collection, TemporalApprovalModel approvalInfo)
{
}
[HttpPost]
public ActionResult RemoveGroup(FormCollection collection, TemporalApprovalModel approvalInfo)
{
}
第二,在按钮上,您可以使用属性formaction
和formmethod
指定您的新操作之一。
<td align="left" width="300">
<input type="submit" formmethod="post" formaction="@Url.Action("AddGroup", "{ControllerName}")" value="Add Group" name="Add" id="submit" />
</td>
<td align="left" width="300">
<input type="submit" formmethod="post" formaction="@Url.Action("RemoveGroup", "{ControllerName}")" value="Remove Group" name="Remove" id="submit" />
</td>
其中{ControllerName}
是控制器的名称。您可能需要修改@Url.Action
函数以适合您的应用程序。
当您单击提交按钮时,它将调用正确的操作。
请参考MDN Web Doc作为输入元素,以查看它是否与您的环境兼容。搜索formaction
,您会看到兼容性表。您还可以在formaction
和formmethod
上看到更多信息。
编辑: 一些其他提示。
生成表单时,请确保在测试时删除当前的发布信息:
@using (Html.BeginForm("SaveServiceWindow", "Approve", FormMethod.Post, new { name = "SaveServiceWindow" }))
{
}
到
@using ()
{
}
由于在输入中指定了formaction和formmethod,因此在表单上不需要它们。
要确保生成正确的链接,请右键单击输入,然后单击检查。查看输入属性是什么,并确保它们正确。
由于您对Web开发的经验不是很丰富(以您自己的话说,没有粗鲁的经验),因此建议您在HTML forms.上阅读一些基本信息,无论何时生成POST请求且不使用AJAX,您需要一个表格来提交数据。然后,take a look介绍如何使用Razor引擎在MVC中完成此操作。