在视图中调用来自不同路由的多个控制器方法

时间:2012-12-20 10:35:14

标签: asp.net-mvc

我有一个问题:

我想知道是否有办法在不同路径的视图中调用多个控制器的方法,我将解释:

我想使用“默认”路线和我创建的新路线:

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Index", action = "Index", id = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "TranslateText",
            url: "{controller}/{action}/{stringToTranslate}/{from}/{to}",
            defaults: new { controller = "Translation", action = "TranslateText", stringToTranslate = "", from = "", to = "" }
        );

我的视图中有多个项目正在使用默认路由,但我有一个人正在使用“TranslateText”路由。

我在视图中称它为:

<legend id="UploadCVLabel" style="color: #FF6600;">@(Url.Action("TranslateText", "Translation", "Upload your CV (Drag & Drop)", "en", "de" }; ))
                    </legend>

在我的控制器中,这是该方法的签名:     public JsonResult TranslateText(string stringToTranslate =“”,string inputLangCode =“en”,string outputLangCode =“fr”)

我想知道是否有办法在同一视图中调用它们,因为如果我将“TranslateText”路由放在“Default”路径之前,它只调用没有参数的“TranslateText”方法并返回一个空的JSON。 如果我正在做相反的事情(“TranslateText”路线之前的“默认”),它将永远不会调用最后一条路线(“TranslateText”)。

由于

P.S:我是MVC世界的新手:)

1 个答案:

答案 0 :(得分:1)

您在Url.Action()语法中有错误,请使用以下命令:

@(Url.Action("TranslateText", "Translation", new {stringToTranslate = "Upload your CV (Drag & Drop)", from = "en", to = "de" } ))

将方法签名更改为:

public ActionResult TranslateText(string stringToTranslate = "", string from = "en", string to = "fr")
{
  ...
  return View(...);
}

将您的自定义路线放在默认

之前