Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从另一个操作返回操作不起作用?_C#_.net_Asp.net Mvc_C# 4.0_Asp.net Mvc 4 - Fatal编程技术网

C# 从另一个操作返回操作不起作用?

C# 从另一个操作返回操作不起作用?,c#,.net,asp.net-mvc,c#-4.0,asp.net-mvc-4,C#,.net,Asp.net Mvc,C# 4.0,Asp.net Mvc 4,我试图重载一个MVC操作,但由于“重载”对路由操作不起作用(错误500表示方法不明确,我猜是因为浏览器中的参数不能强类型),因此我认为我应该将一个操作返回到另一个操作,因为我也不能对HttpPost使用RedirectToAction。问题是它试图找到一个具有新操作名称的视图,而不是我试图调用的aciton。以下是我试图做的: [HttpPost] public ActionResult DetailForProductID(int productID) {

我试图重载一个MVC操作,但由于“重载”对路由操作不起作用(错误500表示方法不明确,我猜是因为浏览器中的参数不能强类型),因此我认为我应该将一个操作返回到另一个操作,因为我也不能对HttpPost使用RedirectToAction。问题是它试图找到一个具有新操作名称的视图,而不是我试图调用的aciton。以下是我试图做的:

    [HttpPost]
    public ActionResult DetailForProductID(int productID)
    {
        return Detail(new[] { GetProductById(productID) });
    }

    [HttpPost]
    public ActionResult Detail(IEnumerable<Product> products)
    {
       ....
       return View(productViewModel);
    }

处理这一问题的最稳健、最优雅的方式是什么?我不想在临时会话中存储东西,也不想执行重定向操作,因为我应该能够在服务器端执行所有操作。任何帮助或建议都将不胜感激。

对于这样的重定向,我建议如下:

return RedirectToAction("Detail", data);
但我不知道你为什么需要这个。看看你的行为,为什么不这样做呢

public ActionResult Detail(int productId)
{
   var data = GetProductById(productID);
   ....
   return View(productViewModel);
}

对于这样的重定向,我建议如下:

return RedirectToAction("Detail", data);
但我不知道你为什么需要这个。看看你的行为,为什么不这样做呢

public ActionResult Detail(int productId)
{
   var data = GetProductById(productID);
   ....
   return View(productViewModel);
}

您还可以在此场景中使用Tempdata,例如:

public ActionResult DetailForProductID(int productID)
{
    IEnumerable<Product> data =   GetProductById(productID);
    TempData["ProductData"]= data;
    return RedirectToAction("Detail",data);        
}


public ActionResult Detail(IEnumerable<Product> products)
{
   ....
    if(TempData["ProductData"]!=null){
       IEnumerable<Product> data =  (IEnumerable<Product>)TempData["ProductData"];
       return View(data);
    }else {
       return View(products);
    }
}
public ActionResult DetailForProductID(int-productID)
{
IEnumerable data=GetProductById(productID);
TempData[“ProductData”]=数据;
返回重定向到操作(“详细”,数据);
}
公共行动结果详细信息(IEnumerable产品)
{
....
if(TempData[“ProductData”]!=null){
IEnumerable数据=(IEnumerable)TempData[“ProductData”];
返回视图(数据);
}否则{
返回视图(产品);
}
}

您也可以在此场景中使用Tempdata,例如:

public ActionResult DetailForProductID(int productID)
{
    IEnumerable<Product> data =   GetProductById(productID);
    TempData["ProductData"]= data;
    return RedirectToAction("Detail",data);        
}


public ActionResult Detail(IEnumerable<Product> products)
{
   ....
    if(TempData["ProductData"]!=null){
       IEnumerable<Product> data =  (IEnumerable<Product>)TempData["ProductData"];
       return View(data);
    }else {
       return View(products);
    }
}
public ActionResult DetailForProductID(int-productID)
{
IEnumerable data=GetProductById(productID);
TempData[“ProductData”]=数据;
返回重定向到操作(“详细”,数据);
}
公共行动结果详细信息(IEnumerable产品)
{
....
if(TempData[“ProductData”]!=null){
IEnumerable数据=(IEnumerable)TempData[“ProductData”];
返回视图(数据);
}否则{
返回视图(产品);
}
}

我认为保持控制器“瘦”和“哑”很重要。一旦你超越了一个简单的网站,需要构建更复杂的东西,你就不想多次重写相同的代码(因为很多原因都不好)。将控制器作为通用函数使用也将变得不可能(这基本上就是您现在尝试做的)

处理此问题的一种更优雅、更健壮的方法是将应用程序逻辑抽象出来并在其他地方执行。然后,您可以根据操作的需求调用逻辑片段。要开始朝这个方向发展,您可以在每个控制器中编写特定于控制器的逻辑,然后确定它们之间共享的功能,并将其放在项目的其他地方。在更复杂的项目中,控制器中完全没有应用程序逻辑并不罕见


您可能希望尝试创建一个泛型函数,该函数可能通过Id返回“Product”,并将该函数放在其他地方。然后使用控制器确定特定的逻辑,并调用共享函数以按Id获取产品。

我认为保持控制器“精简”和“哑”很重要。一旦你超越了一个简单的网站,需要构建更复杂的东西,你就不想多次重写相同的代码(因为很多原因都不好)。将控制器作为通用函数使用也将变得不可能(这基本上就是您现在尝试做的)

处理此问题的一种更优雅、更健壮的方法是将应用程序逻辑抽象出来并在其他地方执行。然后,您可以根据操作的需求调用逻辑片段。要开始朝这个方向发展,您可以在每个控制器中编写特定于控制器的逻辑,然后确定它们之间共享的功能,并将其放在项目的其他地方。在更复杂的项目中,控制器中完全没有应用程序逻辑并不罕见


您可能希望尝试创建一个泛型函数,该函数可能通过Id返回“Product”,并将该函数放在其他地方。然后,使用控制器确定特定逻辑并调用共享函数以按Id获取产品。

为什么使用POST作为接受Id参数的方法(
DetailForProductID
)?事实上,GET似乎更合适。我仍然认为<代码>重定向Toaction 是最好的选择。在MVCC控制器中,TWOFFLASH,如果这些控制器动作与JavQuery?@ EnthHoMrStRo.m M号一起使用,例如“代码< >代码> > DealIfFultIdID(int生产),您会考虑<代码> GET < /代码>是正确的方法吗?看起来不像与
$一起使用的。post
。这看起来像是一个获取指定产品详细信息的操作。@twoflower您可能是对的。我想我只是把自己弄糊涂了即使我将其更改为GET,我仍然会遇到调用其他操作的相同问题。为什么对接受ID参数的方法使用POST(
DetailForProductID
)?事实上,GET似乎更合适。我仍然认为<代码>重定向Toaction 是最好的选择。在MVCC控制器中,TWOFFLASH,如果这些控制器动作与JavQuery?@ EnthHoMrStRo.m M号一起使用,例如“代码< >代码> > DealIfFultIdID(int生产),您会考虑<代码> GET < /代码>是正确的方法吗?看起来不像与
$一起使用的。post
。这看起来像是一个获取指定产品详细信息的操作。@twoflower您可能是对的。我想我只是把自己弄糊涂了即使我改变了它,以获得,我仍然会遇到相同的公关