我想在我的视图中有两个按钮(称为Create),一个提交表单并将用户带回主页(如果已完成)和一个提交表单但重新加载评级页面以便能够添加额外的评级。
以下是我现在遇到的问题 -
目前我有一个按钮,在我的控制器中有一个动作结果:
public ActionResult Create(Rating rating)
{
if (ModelState.IsValid)
{
db.Ratings.Add(rating);
db.SaveChanges();
return RedirectToAction("Index");
}
**Additional code that is irrelevant here
}
我遇到的问题是这个ActionResult在主页中有一个Redirect,所以当我提交另一个按钮并使用同一个ActionResult类时,它会被重定向到主页。我在视图中使用javascript onclick事件,当单击按钮并提交表单时重定向到Ratings页面,但如果我对两个按钮使用相同的Action Result类,则重定向按钮我想让我保持在页面上到索引页面。
如何从同一视图创建两个Action Result类,每个提交按钮一个?
答案 0 :(得分:2)
那么,您如何确定用户想要做什么?
两个按钮都提交表单,因此他们仍然可以使用相同的操作。但你需要以某种方式区分。你可以用按钮做到这一点。
假设您有这两个按钮:
<input type="submit" name="redirect" value="true" />
<input type="submit" name="redirect" value="false" />
然后你可以在你的动作方法中绑定它:
public ActionResult Create(Rating rating, bool redirect)
{
// other logic
if (redirect)
return RedirectToAction("Index");
else
return View(rating);
}
如果您有两个以上可能的选项,那么您可以使用字符串而不是布尔值。类似的东西:
<input type="submit" name="action" value="redirect" />
<input type="submit" name="action" value="reload" />
然后在控制器中:
public ActionResult Create(Rating rating, string action)
{
// other logic
if (action.Equals("redirect"))
return RedirectToAction("Index");
else if (action.Equals("reload"))
return View(rating);
else if //...
//... and so on
}
关键是客户端代码需要告诉服务器端代码以某种方式做什么。在表单提交本身中包含它会使表单提交自我描述,并允许服务器端代码轻松处理它。
答案 1 :(得分:0)
如何使用
的示例Html,内部形式:
<button type="submit" name="TaskSubmitAction" value="ActionReject" class="btn btn-danger pull-left">Reject</button>
<button type="submit" name="TaskSubmitAction" value="ActionSubmit" class="btn btn-success">Accept</button>
控制器:
public ActionResult TaskSubmit(int? id, string TaskSubmitAction)
{
switch (TaskSubmitAction)
{
case "ActionSubmit":
break;
case "ActionReject":
break;
default: throw new Exception();
}
答案 2 :(得分:0)
在你的html中,两个按钮都是相同的名称&#39;属性,但分配两个不同的值。
<button name="submitBtn" value="valueX"> Button 1 </button>
<button name="submitBtn" value="valueY"> Button 2 </button>
在服务器端代码中获取输入按钮的值,并根据此值执行不同的操作
String choice = request.getParamter("submitBtn");
if(choice.equals("valueX"))
//do something
else if(choice.equals("valueY"))
//do something else