我无法在某些情况下结束回复
例如下面(在上传操作方法中),如果调用了Logerror方法,我只想返回视图(浏览器)而无需进一步操作。即从上传行动方法返回 Plase找到修改后的问题我想要实现的目标, 如果出现错误,我想通过停止所有进一步的操作来返回视图
public ActionResult Index()
{
return View();
}
public ActionResult Upload()
{
int i=1;
DoSomethingFirst();
//if LogError i dont want execute code below, rather it should end responce
//should not reach here
string s="This should not be executed in case of LogError()";
return View("Index");
}
public void DoSomethingFirst()
{
try{
DoSomethingSecond();
}
catch(exception ex)
{
LogError();
}
}
public void DoSomethingSecond()
{
try{
DoSomethingThird();
}
catch(exception ex)
{
LogError();
}
}
public void DoSomethingThird()
{
try{
DoSomethingother();
}
catch(exception ex)
{
LogError();
}
}
private LogError()
{
Viewbag.Error="Error details";
return View("Index");
}
答案 0 :(得分:1)
这不会返回当前方法的结果:
DoSomething();
但是这个确实:
return DoSomething();
如果要结束当前方法的执行,则需要执行退出方法的操作。基本上,要么从方法返回,要么抛出异常。由于DoSomething
会返回结果,因此您可能希望返回 结果。因此,只需在调用方法时添加return
语句。
我尝试了RedirectToAction(“索引”);
同样的问题。您需要返回结果:
return RedirectToAction("Index");
修改:根据您对问题的修改,整体概念仍然存在。在这里关注代码的这一部分:
var s = DoSomethingFirst();
//if true i dont want execute code below, rather it should end responce
//should not reach here
要退出C#中的方法任何方法,您需要return
或throw
。所以第一个问题是......你想在这做什么?例如,如果要返回重定向,则返回重定向:
return RedirectToAction("SomeAction");
如果要返回默认视图,请返回:
return View();
如果你想抛出异常:
throw SomeException("Some Message");
选择权在你手中。你只需要定义:
对于第二点,您的代码评论说:
//if true ...
这是否意味着DoSomethingFirst()
返回bool
表示成功或失败?那么这将是一个简单的if
语句:
if (!DoSomethingFirst())
return View();
另一个编辑:根据您的评论:
内部LogError mehod由action方法中的任何子方法调用,我想用错误消息更新视图并结束操作而无需进一步操作
您的Update
方法如何知道内部调用的内容称为LogError()
? DoSomethingFirst()
返回的哪些信息表明了这一事实?目前它没有。您的各种DoSomething
方法都是吞咽异常,这意味着它们在内部处理异常,因此消费代码不会了解它们。
如果您想要使用代码来了解异常,请重新抛出该异常。例如:
public void DoSomethingFirst()
{
try
{
DoSomethingSecond();
}
catch(exception ex)
{
LogError();
throw; // <-- this will re-throw ex without modifying it
}
}
这将返回DoSomethingFirst()
的信息,特别是发生错误的事实。然后,您的消费代码可以检查该错误:
try
{
DoSomethingFirst();
}
catch (Exception ex)
{
// You should *probably* do something with ex too. So far all of your "logging" has been ignoring the actual error.
return View();
}
无论您构建什么结构,基础都不会改变。为了使代码能够了解它调用的代码,该调用的代码必须公开该信息。要结束方法的执行,您必须return
或throw
。如果您希望使用代码响应来处理这些异常,请不要隐藏使用代码的异常。