C# Html.Action或Html.Partial不使用属性路由

C# Html.Action或Html.Partial不使用属性路由,c#,asp.net,.net,asp.net-mvc,asp.net-mvc-5,C#,Asp.net,.net,Asp.net Mvc,Asp.net Mvc 5,我有一个简单的测试控制器,定义为 [Route("~/testAction/testcontroller/{viewhash}")] public ActionResult ATest(string viewHash) { var viewname = commonDataCollection.Instance.WidgetHashList[viewHash]; return Content($"Success hash by vi

我有一个简单的测试控制器,定义为

[Route("~/testAction/testcontroller/{viewhash}")]
public ActionResult ATest(string viewHash)
        {
            var viewname = commonDataCollection.Instance.WidgetHashList[viewHash];
            return Content($"Success hash by view name is: {viewhash}","text/html");
        }
如果我从浏览器中调用此选项,则此选项有效

如果我使用实际操作/控制器名称而不是属性路由值,但如果我尝试使用
Html Helper
执行相同操作,并定义路由,例如:

@Html.Action("testAction", new { viewhash = "FuMmWA1217dgnaT",area="",controller= "testcontroller" });

甚至在尝试渲染函数时,也会出现以下错误:

执行子请求失败。请检查一下表 有关详细信息,请参阅InnerException。在 System.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerWrapper.Wrap[TResult](Func
1
func)at
System.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerAsyncWrapper.BeginProcessRequest(HttpContext
上下文、异步回调、对象外部数据)位于
System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler处理程序,
TextWriter编写器,布尔保留形式,布尔设置上一页,
VirtualPath,VirtualPath文件路径,字符串physPath,异常
错误,字符串queryStringOverride)位于
System.Web.HttpServerUtility.Execute(IHttpHandler处理程序,TextWriter
编写器,布尔形式,布尔设置(上一页),位于
System.Web.HttpServerUtility.Execute(IHttpHandler处理程序,TextWriter
编写器,布尔形式)位于
System.Web.HttpServerUtilityWrapper.Execute(IHttpHandler处理程序,
文本编写器编写器,布尔形式)位于
System.Web.Mvc.Html.ChildActionExtensions.ActionHelper(HtmlHelper
htmlHelper、String actionName、String controllerName、,
RouteValueDictionary routeValues,TextWriter TextWriter)位于
System.Web.Mvc.Html.ChildActionExtensions.Action(HtmlHelper
htmlHelper、String actionName、String controllerName、,
RouteValueDictionary routeValues)位于
System.Web.Mvc.Html.ChildActionExtensions.Action(HtmlHelper
htmlHelper、字符串actionName、对象路由值)位于
ASP.\u页面\u视图\u widgetrenders\u联系人\u cshtml.Execute()在中
D:\项目\公司
projects\CMSAlpha\CMSAlpha\Views\widgetreders\contact.cshtml:第20行
路径“/2/abc”的控制器未找到或未实现
I控制器。System.Web.HttpException(0x80004005):用于
路径“/2/abc”未找到或未实现IController。在
System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext
requestContext,类型controllerType)位于
System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext
requestContext,String controllerName)位于
System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase
httpContext、IController和controller、IControllerFactory和factory)位于
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase
httpContext、异步回调、对象状态)位于
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext HttpContext,
异步回调,对象状态)在
System.Web.Mvc.MvcHandler.System.Web.IHTTPassynchandler.BeginProcessRequest(HttpContext
上下文、异步回调、对象外部数据)位于
System.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerAsyncWrapper.c__DisplayClass7.b__6()
在
System.Web.Mvc.HttpHandlerUtil.serverexecutehtphandlewrapper.Wrap[TResult](Func
1 func)at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext,类型controllerType)位于 System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext,String controllerName)位于 System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext、IController和controller、IControllerFactory和factory)位于 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext、异步回调、对象状态)位于 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext HttpContext, 异步回调,对象状态)在 System.Web.Mvc.MvcHandler.System.Web.IHTTPassynchandler.BeginProcessRequest(HttpContext 上下文、异步回调、对象外部数据)位于 System.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerAsyncWrapper.c__DisplayClass7.b__6() 在 System.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerWrapper.Wrap[TResult](函数'1 (func)


很确定你想做的事做不到。Action需要控制器中操作方法的名称。与路由无关。@Tobias是否可以使用路由值启动此操作,我是否应该寻找扩展方法方法方法。。。我必须有这个功能才能调用正确的控制器并得到响应。@Tobias根据这一点,我认为这几乎是可能的,不知道为什么我的控制器会导致问题这表明这是可能的?如果你要硬编码路线(如果你在那里使用部分路线,你会这么做)那么使用
Html.Action
就毫无意义了。只需硬编码整个URL。使用
Html.Action
的全部意义在于,您可以在一个地方更改路由,而不必在使用路由的任何地方进行更新。
@Html.Partial("testAction", new { viewhash = "FuMmWA1217dgnaT",area="",controller= "testcontroller" });