相关疑难解决方法(0)

使用ASP.NET MVC3在自定义Htmlhelper中查找区域名称和控制器名称

我尝试重写和自定义@Html.ActionLink,在此方法的一个重载中,参数是:

public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, 
                                       string linkText,   string actionName);
Run Code Online (Sandbox Code Playgroud)

我想要像上面这样的东西,还需要找到AreaName和ControllerName而不通过参数传递它,我想使用以下内容:

string controller = ViewContext.RouteData.Values["Controller"];
string area = ViewContext.RouteData.DataTokens["Area"];
Run Code Online (Sandbox Code Playgroud)

但错误上升为:

An object reference is required for the non-static field, method, or property
'System.Web.Mvc.ControllerContext.RouteData.get'
Run Code Online (Sandbox Code Playgroud)

显然我使用静态,那你在寻找区域名称和控制器名称的建议是什么HtmlHelpers

asp.net-mvc static html-helper razor asp.net-mvc-3

10
推荐指数
1
解决办法
7676
查看次数

UrlHelper.Action不会映射到控制器正确的区域

更新2

好的 - 所以看起来我的问题再次稍微改变:-)

我现在意识到UrlHelper.Action似乎没有正确解析任何区域中的URL,除非明确指定了区域名称.如果没有指定它似乎返回我们当前所在的任何区域名称,这使得它看起来像是从站点的一个部分起作用,但是然后另一个区域中的相同链接解析为错误的区域名称.

要么我做了一些时髦的事情要么做到这一点,要么我不太了解这个Action方法是如何工作的.

更新1

我可以通过以下方式完成这项工作:

return helper.Action("add", "product",new {area = "storemanagement"});
Run Code Online (Sandbox Code Playgroud)

这稍微改变了我的问题.

为什么MVC路由不会消除具有相同名称的控制器的歧义并解析为指定了action方法的控制器?

原创帖子

嘿大家,

我在UrlHelper类上创建了一个辅助方法,并且其中一个路由遇到了一个小问题.

这是有问题的辅助方法的代码:

public static string AddProduct(this UrlHelper helper)
        {
            return helper.Action("add", "product");
        }
Run Code Online (Sandbox Code Playgroud)

我基本上有两个名为"product"的控制器,它们位于站点的不同区域.其中一个用于浏览产品,另一个用于产品管理.只有一个产品控制器包含一个操作方法"添加".

当我输出AddProduct的值

<%: Url.AddProduct() %>
Run Code Online (Sandbox Code Playgroud)

区域名称将解析为我正在浏览的当前区域,而不是包含Add操作方法的产品控制器的正确区域.

我需要在路线中设置一些东西吗?我不确定路由如何与UrlHelper.Action一起使用,所以我不知道是否有可能做我正在尝试的事情.

欢呼任何帮助.

c# asp.net asp.net-mvc-routing asp.net-mvc-2

8
推荐指数
1
解决办法
5942
查看次数

在ASP.NET MVC3 Razor的渲染时间视图中获取区域名称

ViewContext.RouteData.Values["Controller"]用来获取控制器名称或ViewContext.RouteData.Values["action"]在视图中获取操作名称(实际上在_Layout中),但是对于区域来说这ViewContext.RouteData.Values["Area"]不起作用.您有什么建议在programmaticaly视图中获取区域名称?

asp.net-mvc razor asp.net-mvc-3-areas asp.net-mvc-3

7
推荐指数
1
解决办法
2881
查看次数

如何在ASP.NET Core中的.cshtml文件中获取当前的MVC区域名称

我可以_Layout.cshtml 通过执行以下操作获取当前控制器名称和操作名称

var controller = ViewContext.RouteData.Values["controller"].ToString();
var action = ViewContext.RouteData.Values["action"].ToString();
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试获得该区域

var area = ViewContext.RouteData.Values["area"].ToString();
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为该对象中只存在2个键("控制器"和"动作")

我检查了ViewContext.RouteData对象,无法获取当前Area名称的值.

之前版本的先前答案ASP.net对我不起作用.

asp.net-core-mvc asp.net-core

5
推荐指数
1
解决办法
2917
查看次数

从 ActionExecutingContext 获取区域名称

我正在编写一个 ActionFilter 并且需要从 ActionExecutingContext 参数中获取区域名称(我想实现基于快速和脏登录的安全性)。是否可以?

asp.net-mvc

4
推荐指数
1
解决办法
4132
查看次数

ASP.NET MVC5路径注释MS_DirectRouteMatches

我有一个ASP.NET和MVC5的小问题(我开始使用MVC.NET).直到昨天,一切都很好!但今天,我不知道为什么,我有"自定义路线注释"的问题.

我有一个控制器"Prodouits"与此动作:

[Route("{culture}/Produits/{nom_groupe}/{nom}-{id}")]
public ActionResult Detail(string nom_groupe, string nom, string id)
{
    // ...   
    return View();
}
Run Code Online (Sandbox Code Playgroud)

在我的观点中,当我调用"Url.Action(...)"时,URL很好.但是当我进入页面时,RouteData似乎很糟糕(RouteData未正确恢复).

看看我的RouteData:Keys [0] =>"MS_DirectRouteMatches"Keys [1] =>"controller"

Values[0] => //A list of only 1 RouteData with my 6 parameters into it...
Values[1] => Produits
Run Code Online (Sandbox Code Playgroud)

如果我删除我的"自定义路线通知",一切都很好,但URL非常难过...

有人对问题和解决方案有所了解吗?谢谢大家的帮助!

编辑:有关此问题的更多信息.我有一个语言的"BaseController".我重写了"BeginExecuteCore"方法.有代码:

protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)
{
    string cultureName = RouteData.Values["culture"] as string;

    // Attempt to read the culture cookie from Request
    if (cultureName == null)
        cultureName = Request.UserLanguages != null && Request.UserLanguages.Length > 0 ? …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc routes

3
推荐指数
1
解决办法
2502
查看次数