无法将类型“System.Web.Mvc.RedirectToRouteResult”隐式转换为“System.Web.Mvc.JsonResult”

Posted

技术标签:

【中文标题】无法将类型“System.Web.Mvc.RedirectToRouteResult”隐式转换为“System.Web.Mvc.JsonResult”【英文标题】:Cannot implicitly convert type 'System.Web.Mvc.RedirectToRouteResult' to 'System.Web.Mvc.JsonResult' 【发布时间】:2014-07-23 08:58:27 【问题描述】:

如何从 JsonResult 重定向到 ActionResult 到 ActionResult 但我收到错误。我的错误是“无法将类型'System.Web.Mvc.RedirectToRouteResult'隐式转换为'System.Web.Mvc.JsonResult'”。 我的代码

Json 结果:

   public JsonResult AddTruckExpensesTransactionChild(string totaldays, string amount)
   
        string Mess = objActive.Save();
        if (Mess == "1")
        
            return RedirectToAction("GetTruckExpensesChild", new  id="", sid="" );
        
        return Json(Mess, JsonRequestBehavior.AllowGet);
   

动作结果:

    public ActionResult GetTruckExpensesChild(string id, string sid)
    
        TruckExpensesTransactionClass Transaction = new TruckExpensesTransactionClass();
        if (sid != null)
                        
            Transaction.TransactionChild = objActive.ShowTransactionChild(id, sid);
            return View(Transaction);
        
        else
                        
            return View(Transaction);
        
    

【问题讨论】:

【参考方案1】:

您需要使用基类 ActionResult 以便可以返回 ViewJSONContent 或 局部视图:

public ActionResult AddTruckExpensesTransactionChild(string totaldays, string amount)
   
        string Mess = objActive.Save();
        if (Mess == "1")
              return Json(new  Url = Url.Action("GetTruckExpensesChild", new  id = "", sid = "" ) );

        return Json(Mess, JsonRequestBehavior.AllowGet);
   

但是,如果您通过 ajax 调用此操作,则必须通过 javascript 重定向到该操作,因为返回 RedirectToAction 将返回 html 以响应 ajax 而不是重定向。

因此,您需要通过带有一些标志的 json 返回操作 url,并检查是否响应具有该标志,通过 jquery 重定向到该 url。

在 Ajax 调用成功检查它的 url:

success: function(result) 
          if(result.Url.length > 0)

        window.location.href=result.Url;

【讨论】:

是的,此代码返回到该操作,但我的页面未重定向。 你必须返回你想要通过jquery重定向和重定向的url 我无法理解,请给我示例代码,因为我是 jquery 新手 没有朋友不工作 输入alert(result)查看返回的内容【参考方案2】:

JsonResult 类实现了ActionResult 类。只需将 JsonResult 更改为 ActionResult 作为您的操作方法的返回类型:

public ActionResult AddTruckExpensesTransactionChild(string totaldays, string amount)

    string Mess = objActive.Save();
    if (Mess == "1")
    
        return RedirectToAction("GetTruckExpensesChild", new  id="", sid="" );
    
    return Json(Mess, JsonRequestBehavior.AllowGet);

【讨论】:

是的,此代码返回到该操作,但我的页面未重定向。

以上是关于无法将类型“System.Web.Mvc.RedirectToRouteResult”隐式转换为“System.Web.Mvc.JsonResult”的主要内容,如果未能解决你的问题,请参考以下文章

C# 无法将类型为“System.Byte[]”的对象强制转换为类型“System.Data.DataTable

无法将类型“[PHAsset]”的值分配给类型“UIImageView!”

无法将 [Struct] 类型的值快速转换为 [string] 类型

无法将类型“()”的值转换为预期的参数类型“字符串”

无法将“字符串”类型的值转换为预期的参数类型 [任何]

无法将值类型“()”分配给字符串类型?