我有2个按钮,即保存和取消我的Profile.cshtml。现在我的方法是:
[HttpPost]
public ActionResult Profile()
{
//code..
}
将记录保存到数据库中。但问题是,Cancel也在这里发布,记录保存在数据库中。我该如何处理?
在视图中,您可以有2个表单(每个按钮一个),其中每个表单的动作发送到控制器中的相关动作方法。例如,在视图中:
@using (Html.BeginForm("Save", "Profile"))
{
<input type="submit" value="Save"/>
}
@using (Html.BeginForm("Cancel", "Profile"))
{
<input type="submit" value="Cancel"/>
}
然后在控制器中:
[HttpPost]
public ActionResult Save()
{
...
}
[HttpPost]
public ActionResult Cancel()
{
...
}
我经常使用传递给视图的视图模型类,在该视图模型中我有:
public string submit { get; set; }
public bool SaveButtonClicked()
{
return this.submit.Equals("save");
}
public bool CancelButtonClicked()
{
return this.submit.Equals("cancel");
}
然后在控制器
[HttpPost]
public ActionResult Save(MyViewModel inputViewModel)
{
if(inputViewModel.SaveButtonClicked()) {}
blah.......
}
我的视图是这样的
@using (Html.BeginForm())
{
// Other stuff.
<input type="submit" name="submit" value="Save" />
<input type="submit" name="submit" value="Cancel" />
}
这对我来说真的很有效。通过让提交按钮使用相同的名称,当按下其中一个按钮时,该名称将传递给视图模型的submit
属性。我不确定是否有重复的名字是一个坏主意,但对于我的需要,这是很好的。
通常你有一个保存按钮来提交你的表单,取消按钮只是一个指向你的索引的ActionLink。
这听起来像你的取消按钮的type
属性设置为submit
。这将使表单提交,就像您按下保存按钮一样。
你应该问自己的问题是你想要"取消"按钮做什么?如果它只是一个没有完成表单的情况下,它可能会更好地使一个按钮转到另一个页面,否则,如果你需要将它指向一个ActionResult,那么你将不得不做一个重定向工作。