使用 aspnetboilerplate 时如何从一个视图链接到另一个视图?

Posted

技术标签:

【中文标题】使用 aspnetboilerplate 时如何从一个视图链接到另一个视图?【英文标题】:How do I link from one view to another when using aspnetboilerplate? 【发布时间】:2017-10-11 17:36:59 【问题描述】:

我已尝试使用可在基本 mvc 项目中使用的普通链接,以及类似于我在视图页面中看到的链接,但我似乎遇到了一个错误,只有在我添加视图时才能解决作为 MainMenu 上的菜单项,这不是我想要做的。一定有办法解决这个问题...

我有一个页面“WorkOrders”(工作订单/索引),其中显示了工作订单列表。有一个用于创建新工作订单的链接,该链接应该转到“创建”(工作订单/创建,我还需要让工作订单/创建/客户 ID 工作)页面。

<a asp-action="Create">Create New</a>

<a href="/workorders/create">Create New</a>

点击时都会产生错误:

Unhandled exception at line 127, column 17 in 
http://localhost:62114/js/admin.js
0x800a138f - javascript runtime error: Unable to get property 'offsetTop' of 
undefined or null reference

我将在哪里定义“offsetTop”?有没有其他方法可以解决这个错误?我猜如果我试图破解它,我只会得到另一个错误来处理,并希望能正确解决它。

这是否意味着它试图在需要在某处定义该值的共享布局内加载此视图?我看不出 workorders/index 和 workorders/create 之间有什么区别,除了 workorders/index 在 MainMenu 上。

我看到模板附带的页面作为示例都有自己的js文件,我是否需要为我添加的所有视图创建类似的js文件?

【问题讨论】:

【参考方案1】:

您不需要为您添加的所有视图创建 js 文件。

admin.js中更改这个:

var activeItemOffsetTop = $('.menu .list li.active')[0].offsetTop
if (activeItemOffsetTop > 150) $el.slimscroll( scrollTo: activeItemOffsetTop + 'px' );

到这里:

var $activeItem = $('.menu .list li.active')[0];
if ($activeItem.length) 
    var activeItemOffsetTop = $activeItem.offsetTop;
    if (activeItemOffsetTop > 150) $el.slimscroll( scrollTo: activeItemOffsetTop + 'px' );

这是处理主菜单上没有自己的菜单项的页面所必需的。

【讨论】:

我能够添加该代码,但仍然遇到同样的错误。当调试器点击 admin.js 文件中的那一行并向我显示时,我编写的代码没有加载。另外,文件名加载为 admin.js[virtual],我是否需要添加指向该文件的显式链接来解决这部分问题? 天哪,哇,谢谢!好的,不是我得到一个不同的错误。 localhost:62114/js/admin.js 0x800a138f 第 136 行第 17 列未处理的异常 - JavaScript 运行时错误:无法获取未定义或空引用的属性“长度”所以我认为该代码不起作用。也许我没有正确创建视图? 我让它工作,但只是通过注释掉在 admin.js 中抱怨的代码。这不是一个长期的解决方案,但它似乎还没有破坏其他任何东西,现在我可以继续建立我的观点。我现在将继续处理我的观点,稍后尝试修复这部分。 好吧,你需要说一下第 136 行的内容。

以上是关于使用 aspnetboilerplate 时如何从一个视图链接到另一个视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用ABP进行软件开发之基础概览

ABP(http://www.aspnetboilerplate.com/)下载初始化

使用VS进入源码调试

在应用服务中调用验证方法

学习网址

.NET Core