Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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
Asp.net mvc T4MVC@Url.Action(MVC.Controller.Action())呈现“;?面积=”;查询字符串中的参数_Asp.net Mvc_T4mvc - Fatal编程技术网

Asp.net mvc T4MVC@Url.Action(MVC.Controller.Action())呈现“;?面积=”;查询字符串中的参数

Asp.net mvc T4MVC@Url.Action(MVC.Controller.Action())呈现“;?面积=”;查询字符串中的参数,asp.net-mvc,t4mvc,Asp.net Mvc,T4mvc,我正在使用以下命令将菜单从部分操作直接渲染到布局: @Html.Action(MVC.Menu.Index()) 此操作决定渲染哪个菜单部分。例如,公共菜单是局部的。在这些部分中,我还使用T4MVC呈现链接: <ul id="navHolder"> <li class="level1"> <ul class="mainMenu"> <li><b>@Html.ActionLink("Welcome", MVC.H

我正在使用以下命令将菜单从部分操作直接渲染到布局:

@Html.Action(MVC.Menu.Index())
此操作决定渲染哪个菜单部分。例如,公共菜单是局部的。在这些部分中,我还使用T4MVC呈现链接:

<ul id="navHolder">
<li class="level1">
    <ul class="mainMenu">
        <li><b>@Html.ActionLink("Welcome", MVC.Home.Index())</b>
           ... 
    • @ActionLink(“欢迎”,MVC.Home.Index()) ...
出于某些原因,T4MVC呈现的URL在末尾包括“?Area=”:

 <ul id="navHolder">
    <li class="level1">
        <ul class="mainMenu">
            <li><b><a href="/home/index?Area=">Welcome</a></b>
               ...
    • ...
我的项目中没有区域,我已将“IncludeAreasToken”设置设置为false。奇怪的是,只有当我使用“@Html.Action”呈现分部时才会发生这种情况——如果我将其作为“@Html.partial”拉入,则不会呈现参数,并且链接干净且正确。(但我不想将其作为一个部分呈现,所以请不要将其作为一个建议提供;)


以前有人遇到过这种情况吗?

这里发生了一些奇怪的事情,我想知道是否有某种MVC错误的根源。即使不使用T4MVC,如果您编写:

@Html.ActionLink("Welcome", "Index", "Home", new { Area = "" }, null)
在常规视图中,这不会生成伪造的?Area=,而在Html.Action调用中会生成。我需要问问队里的人

目前,您可以通过删除t4mvc.tt中的这一行(第310行附近)来解决问题:

<# if (MvcVersion >= 2) { #>result.RouteValueDictionary.Add("Area", area ?? "");<# } #> 
=2){#>result.RouteValueDictionary.Add(“Area”,Area??);

我以一种非常简单的方式解决了这个问题,只需向所有不在空区内的路线添加如下:

routes.MapRoute(
"Default",
"{controller}/{action}/{i​d}",
new { controller = "Home", action = "Index", area = "", id = UrlParameter.Optional });

从workitem 7154 comments复制的是@Davidebo提供的解决方案:

一个更简单的解决方法是在站点中添加一个虚假区域。例如。\n\n- 右键单击Project并选择Add/Area。将其命名为“Dummy”(或 无论什么)\n-您可以删除其中的所有内容,但 DummyAreaRegistration.cs文件

确保在Global.asax中调用了
AreaRegistration.RegisteralAreas();


这也适用于适当的属性路由。

我刚刚添加了一个检查,以查看是否提供了区域,如果是,我将其添加到字典:
if(!String.IsNullOrWhiteSpace(area)){result.RouteValueDictionary.add(“area”,area??);}
@BradR:这个更改的问题是,我认为它并不总是正确的。当您在区域视图中,试图生成指向顶层(非区域)的链接时视图,然后传递一个空区域是“转义”当前区域的正确方法。但是,如果您的检查不会发生。事实证明,MVC仅在应用程序没有任何区域时生成伪令牌。因此,我们应该修复T4MVC,使其仅在应用程序使用区域时添加此令牌。@Davidebo是否已执行此检查?我正在了解最新的T4MVCNo也存在同样的问题,但这里有一个更简单的解决方法:刚刚测试过,这似乎是最简单的解决方案-只需在默认路由中添加一个String.Empty区域,所有URL都会正确生成。如果在项目中使用属性路由,这将不起作用。请参阅我从mvccontrib存档复制的答案,工作项目7154,因为您现在无法在存档的Codeplex站点上轻松找到它。