Asp.net core mvc 如何调用将返回到调用控制器但也可以具有重定向操作的控制器操作

Asp.net core mvc 如何调用将返回到调用控制器但也可以具有重定向操作的控制器操作,asp.net-core-mvc,asp.net-core-3.1,Asp.net Core Mvc,Asp.net Core 3.1,我的.Net Core 3.1应用程序中有一个控制器,它调用另一个控制器操作。在被调用的控制器中添加RedirectToAction之前,一切正常。我现在希望控制器重定向到错误页面(如果合适),否则返回到原始控制器中调用它的位置 以下是我的控制器中的代码: 公共操作结果编辑(IFormCollection集合,字符串saveClose) { //做事 LoadArrayDataForDB(Id,集合[“名称”].ToString(),集合[“位置”].ToString(),集合[“国家”].To

我的.Net Core 3.1应用程序中有一个控制器,它调用另一个控制器操作。在被调用的控制器中添加
RedirectToAction
之前,一切正常。我现在希望控制器重定向到错误页面(如果合适),否则返回到原始控制器中调用它的位置

以下是我的控制器中的代码:

公共操作结果编辑(IFormCollection集合,字符串saveClose) { //做事 LoadArrayDataForDB(Id,集合[“名称”].ToString(),集合[“位置”].ToString(),集合[“国家”].ToString()); //多做事 返回视图(IVM); } //这是最初的LoadArrayDataForDB操作 public void LoadArrayDataForDB(字符串id、字符串名称、字符串位置、字符串国家/地区) { //添加错误检查 _adoSqlService.DeleteAffectedNames(id); _adoSqlService.DeleteSelectedPlaces(id); _adoSqlService.DeleteCountries(id); } //这就是我需要更改LoadArrayDataForDB操作的方式 public void LoadArrayDataForDB(字符串id、字符串名称、字符串位置、字符串国家/地区) { //添加错误检查 string done=\u adoSqlService.DeleteAffectedNames(id); 如果(完成!=“成功”) { 返回RedirectToAction(“错误”,“主页”,新建{errordescription=“无法删除名称”}); } done=\u adoSqlService.DeleteAffectedPlaces(id); 如果(完成!=“成功”) { 返回RedirectToAction(“错误”,“主页”,新建{errordescription=“无法删除位置”}); } done=\u adoSqlService.DeleteAffectedCountries(id); 如果(完成!=“成功”) { 返回RedirectToAction(“错误”,“主页”,新建{errordescription=“无法删除国家”}); } //等等。。。。 //只需返回到编辑操作的下一步 }
我如何做我需要做的事情?

将加载函数更改为此

[NonAction]
private string LoadArrayDataForDB( id, string names, string places, string countries)
{ 

    //add error checking

    string done = _adoSqlService.DeleteAffectedNames(id,names); // I guess you 
                                                  // have to use names too
    if (done != "Successful")   return  "Unable to delete names";
   
    done = _adoSqlService.DeleteAffectedPlaces(id,places);
    if (done != "Successful")return  "Unable to delete places";
    
    done = _adoSqlService.DeleteAffectedCountries(id,contries);
    if (done != "Successful") return  "Unable to delete countries";
    
    //etc....
return string.Empty
)


or if you want to try all of them before return you can use this

var errMsg=string.Empty;

 string done = _adoSqlService.DeleteAffectedNames(id,names); // I guess you 
                                                  // have to use names too
    if (done != "Successful")   errMsg=  "Unable to delete names";
   
    done = _adoSqlService.DeleteAffectedPlaces(id,places);
    if (done != "Successful") errMsg+=  " Unable to delete places";
    
    done = _adoSqlService.DeleteAffectedCountries(id,contries);
    if (done != "Successful") errMsg+=  "Unable to delete countries";
if(!string.IsNullOrEmpty(errMsg) return errMsg;

   //etc....
return string.Empty

更改您的操作:

public ActionResult Edit(IFormCollection collection, string saveClose)
{
    //do stuff

var errorDescription=  LoadArrayDataForDB(intid, collection["names"].ToString(), collection["places"].ToString(), collection["countries"].ToString())) 

if (! string.IsNullOrEmpty(errorDescription) )
 return RedirectToAction("Error", "Home", new { errorDescription });

    //do more stuff
    
    return View(IVM);
}

我想我的描述不够清楚,所以我修改了这篇文章。我在加载函数中执行多个DB操作。我需要能够重定向,如果他们中的任何失败与失败的错误。谢谢。我接受了你所拥有的,并做了一些小的改变(你所拥有的将按原样工作)。因为我在查看“完成”的响应,所以我也分配了错误文本,而不是错误描述。而不是返回string.Empty;我返回“成功”。然后我只是看看done=“Successful”的值。否则,它将传递“完成”的值。这样我可以保持代码的其余部分一致。