使用AngularJS获取C#中当前页面的URL

时间:2017-02-21 22:51:59

标签: c# angularjs routing singlepage

我正在为SignalR Hub目的跟踪系统。为此,我有一个类,我想存储URL,它将代表用户所在的当前页面,然后是他的最后一个请求,因为我使用分页列表作为我的数据表,我需要确切知道用​​户是哪个页面,当然还有用户ID。

这是我想要存储信息的课程

public class UserTracking
{
    public string URL { get; set; }
    public string LastRequest { get; set; }
    public string UserId { get; set; }
}

由于我有单页应用程序,因为角度路由我在网站上跟踪用户位置时遇到问题,但是为了显示视图,我有带有ActionResults方法的仪表板控制器,以允许我显示带有角度路由的.cshtml页面,类似这样的事情

public ActionResult ProjectTask()
{
    return View();
}

public ActionResult Project()
{
    return View();
}

我的问题是,我是否能够以某种方式在我的网站上获取用户位置的URL。例如,如果用户在http://localhost:2969/Dashboard#/tasks/,我希望获得此/Dashboard#/tasks。也许我可以从我的ActionResults获得一些信息,但我不知道如何。

1 个答案:

答案 0 :(得分:0)

很难知道这对您提供的信息是否有效,但以下情况可行。

如果您知道用户必须导航到达MVC Controller的特定路由,那么您可以在返回视图时将该信息作为模型传递。假设我有一条MVC路线,该路线旨在返回一个Razor页面,该页面显示我名单中名为“Freddy's Birthday”的所有项目。在这种情况下,URL看起来像:

localhost/list/Freddy's%20Birthday

匹配路线:

[Route("~/list/{id}")]

要通知Angular您正在处理的内容,只需将信息作为模型传递:

public ActionResult List(string id)
{
    return View(model: id);
}

您可以使用@Model在cshtml中访问该模型。如果传入的ID是“Freddy's Birthday”,就像之前一样:

<div todo-list-item-directive>@Model</div>

将从ASP返回:

<div todo-list-item-directive>Freddy's Birthday</div>

这种方式有效,如果您需要传递更复杂的信息,可以构建一些视图模型以在Razor页面中引用。但是,如果可能的话,设置ui-router并将Angular用于视图路由和ASP.NET用于API可能是值得的。