我收到错误,该操作并未在任何路径中返回内容。
你会做什么,我能回到什么意义?抛出异常?
[HttpPost]
public virtual ActionResult ActionName(string actionMode, MyViewModel vm)
{
switch (actionMode)
{
case "yes":
return RedirectToAction("actionName1");
case "no":
return RedirectToAction("actionName2", new { data = vm.data });
}
}
答案 0 :(得分:1)
如果您的逻辑是布尔运算,那么为什么不这样做呢?
[HttpPost]
public virtual ActionResult ActionName(string actionMode, MyViewModel)
{
if (actionMode == "yes")
return RedirectToAction("actionName1");
return RedirectToAction("actionName2", new { data = MyViewModel.data });
}
或者,您可以在switch语句之后抛出异常。
throw new InvalidOperationException();
答案 1 :(得分:0)
[HttpPost]
public virtual ActionResult ActionName(string actionMode, MyViewModel)
{
return actionMode == "yes" ? RedirectToAction("actionName1") : RedirectToAction("actionName2", new { data = MyViewModel.data });
}
答案 2 :(得分:0)
您也可以编写代码: -
[HttpPost]
public virtual ActionResult ActionName(string actionMode, MyViewModel)
{
switch (actionMode)
{
case "yes":
return RedirectToAction("actionName1");
default:
return RedirectToAction("actionName2", new { data = MyViewModel.data });
}
}
默认值将在没有条件匹配时执行。
答案 3 :(得分:0)
您在switch
中收到错误,因为您没有处理另一个字符串值可能会通过。如果您指定默认行为,则可以修复它:
[HttpPost]
public virtual ActionResult ActionName(string actionMode, MyViewModel)
{
switch (actionMode)
{
case "yes":
return RedirectToAction("actionName1");
case "no":
return RedirectToAction("actionName2", new { data = MyViewModel.data });
default:
goto case "yes"; // yes behavior by default
}
}
或者像这样:
default:
throw new InvalidArgumentException("only 'yes' or 'no' parameter value allowed"); // exception for another values
另一个解决方案是强制你的表单通过" True"或"错误"值而不是"是"或" no",并将其绑定到bool参数,并使用if
运算符代替switch
:
[HttpPost]
public virtual ActionResult ActionName([Bind(Prefix = "actionMode")]bool isYesActionMode, MyViewModel)
// Bind attribute used to get value from old parameter name
{
if (isYesActionMode)
return RedirectToAction("actionName1");
return RedirectToAction("actionName2", new { data = MyViewModel.data });
}