从 link 获取将我带到当前页面的值
Get values from link that brought my to the current page
我知道 - 你要说的第一件事是 "Use the referrer!"
但这是错误的答案,我会解释原因。
假设您在一个页面上,比如说 "Employees",它有一个搜索。名称的搜索字段在提交时会产生 table 名员工。在那个 table 中,员工姓名是一个可点击的对象,在本例中是一个 hyperlink。 link 转到员工详细信息页面。在该页面上,实际上什么都没有,因为该页面实际上从子页面加载了一堆 Angular 数据。
所以,问题:
在 Employees 上,您单击 link:
http://localhost/EmployeeData#/details/cc30e1f8-b21c-4384-9710-e927686c925c
link 会将您带到 EmployeeData 控制器和索引视图。索引视图加载details.html,这是一个充满数据的angular幸福。效果很好。
但回到“索引”视图,有一小段代码告诉详细信息在何处显示,并且有面包屑。所以在 Index ViewResult 中,(EmployeeData/Index.aspx),我希望能够从 link 中提取 GUID...但是当我使用 referrer 时,它只是告诉我 "You came from the Employee Search".
public ViewResult Index()
{
var vm = _vmp.GetViewModel<EmployeeDataViewModel>();
vm.Breadcrumb = CreateBreadCrumbDisplay();
return View(vm);
}
public string CreateBreadCrumbDisplay()
{
var referrer = (Request.UrlReferrer != null) ? Request.UrlReferrer.AbsoluteUri : string.Empty;
var curUrl = Request.ServerVariables["SCRIPT_NAME"];
//do lots of stuff
return theBreadCrumb;
}
在这种情况下,CreateBreadCrumbDisplay 只是 returns http://localhost/Employee
。 curUrl 只有 "EmployeeData",这要归功于 angular 页面中发生的所有真实数据,而不是实际在索引视图中。
所以,我需要做的是获取带有 ID 的完整 URL,并将该 ID 传递到我的 "CreateBreadCrumbDisplay" 方法中。
想法?
我认为一个可能的解决方案是使用 $routeParams
获取 URL 参数并将其从 Angular.
传递给您的 CreateBreadCrumbDisplay
方法
如果我正确理解您的问题,请继续阅读 $routeParams
here 应该可以解决您的问题。
这是它应该如何工作的示例:
首先在 Angular
中配置您的路线
myApp.config(function($routeProvider) {
$routeProvider.when('/link/:GUID', {
controller: 'SomeCtrl',
templateUrl: 'sometemplate.html'
});
});
然后在你的控制器中
myApp.controller('SomeCtrl', function($scope, $routeParams) {
console.log($routeParams);
});
Link 从某处
<a href="#/link/cc30e1f8-b21c-4384-9710-e927686c925c">foo</a>
最后是控制台输出:
{ GUID: "cc30e1f8-b21c-4384-9710-e927686c925c" }
据我所知,您可以使用 $location 服务,$location.absUrl(); 而且您可以通过许多其他方式成功实现这一点,甚至通过您的 url 提交时将 action 方法作为参数。
我知道 - 你要说的第一件事是 "Use the referrer!"
但这是错误的答案,我会解释原因。
假设您在一个页面上,比如说 "Employees",它有一个搜索。名称的搜索字段在提交时会产生 table 名员工。在那个 table 中,员工姓名是一个可点击的对象,在本例中是一个 hyperlink。 link 转到员工详细信息页面。在该页面上,实际上什么都没有,因为该页面实际上从子页面加载了一堆 Angular 数据。
所以,问题: 在 Employees 上,您单击 link:
http://localhost/EmployeeData#/details/cc30e1f8-b21c-4384-9710-e927686c925c
link 会将您带到 EmployeeData 控制器和索引视图。索引视图加载details.html,这是一个充满数据的angular幸福。效果很好。
但回到“索引”视图,有一小段代码告诉详细信息在何处显示,并且有面包屑。所以在 Index ViewResult 中,(EmployeeData/Index.aspx),我希望能够从 link 中提取 GUID...但是当我使用 referrer 时,它只是告诉我 "You came from the Employee Search".
public ViewResult Index()
{
var vm = _vmp.GetViewModel<EmployeeDataViewModel>();
vm.Breadcrumb = CreateBreadCrumbDisplay();
return View(vm);
}
public string CreateBreadCrumbDisplay()
{
var referrer = (Request.UrlReferrer != null) ? Request.UrlReferrer.AbsoluteUri : string.Empty;
var curUrl = Request.ServerVariables["SCRIPT_NAME"];
//do lots of stuff
return theBreadCrumb;
}
在这种情况下,CreateBreadCrumbDisplay 只是 returns http://localhost/Employee
。 curUrl 只有 "EmployeeData",这要归功于 angular 页面中发生的所有真实数据,而不是实际在索引视图中。
所以,我需要做的是获取带有 ID 的完整 URL,并将该 ID 传递到我的 "CreateBreadCrumbDisplay" 方法中。
想法?
我认为一个可能的解决方案是使用 $routeParams
获取 URL 参数并将其从 Angular.
CreateBreadCrumbDisplay
方法
如果我正确理解您的问题,请继续阅读 $routeParams
here 应该可以解决您的问题。
这是它应该如何工作的示例:
首先在 Angular
中配置您的路线myApp.config(function($routeProvider) {
$routeProvider.when('/link/:GUID', {
controller: 'SomeCtrl',
templateUrl: 'sometemplate.html'
});
});
然后在你的控制器中
myApp.controller('SomeCtrl', function($scope, $routeParams) {
console.log($routeParams);
});
Link 从某处
<a href="#/link/cc30e1f8-b21c-4384-9710-e927686c925c">foo</a>
最后是控制台输出:
{ GUID: "cc30e1f8-b21c-4384-9710-e927686c925c" }
据我所知,您可以使用 $location 服务,$location.absUrl(); 而且您可以通过许多其他方式成功实现这一点,甚至通过您的 url 提交时将 action 方法作为参数。