我正在为我的视图添加一个PagedList,并且松散地遵循本教程.我已经使用Nuget安装了PagedList引用,按如下方式设置我的控制器
public ViewResult Index(int page = 1)
{
List<Part> model = this.db.Parts.ToList();
const int pageSize = 20;
return View(model.ToPagedList(page, pageSize));
}
Run Code Online (Sandbox Code Playgroud)
并在顶部用以下模型编写我的视图
@model PagedList.IPagedList<RIS.Models.Part>
Run Code Online (Sandbox Code Playgroud)
当我运行页面时,我收到以下错误
Compiler Error Message: CS0246: The type or namespace name 'PagedList' could not be found (are you missing a using directive or an assembly reference?)
Source Error:
Line 27:
Line 28:
Line 29: public class _Page_Areas_Parts_Views_Part_Index_cshtml : System.Web.Mvc.WebViewPage<PagedList.IPagedList<RIS.Models.Part>> {
Run Code Online (Sandbox Code Playgroud)
PagedList dll正在我的控制器中正确加载,因为当我从视图中取出它时,一切都按预期工作.CopyLocal属性设置为'True',我尝试在我的特定区域的Views\Web.Config中包含命名空间.我还能做些什么来使视图看到命名空间?
要导入命名空间,我知道如何使用@using MyNamespace.有谁知道如何在所有剃刀视图中全局导入命名空间?
我听说过AddGlobalImport方法,但不知道如何使用它
也许这对程序员来说是一个问题 - 我相信如果有的话,有人会建议我.
当使用MVC时,我也可以访问Html Helper变量并使用任何扩展方法,无论是.Net的还是我自己指定的.
@Html.Raw("<h1>This is my HTML</h1>")
Run Code Online (Sandbox Code Playgroud)
这是如何实现的?假设我想为了另一个原因添加一个单独的对象,并将其提供给我的MVC应用程序中的所有视图?
我知道我无法将其添加到控制器,因为一个视图可能被多个控制器访问.
所以我最好的猜测是需要继承IView?
编辑:抱歉 - 我没有解释自己.至少我认为......
我希望对象可用,但也要实例化.例如,假设我有一个名为的对象glosrob,有一个方法,SayHello()并希望能够如此使用它:
@glosrob.SayHello()
Run Code Online (Sandbox Code Playgroud)
基本上我想避免在每个视图上添加代码来构造对象,例如避免这种情况
@{
var glosrob = new Glosrob();
}
Run Code Online (Sandbox Code Playgroud) 在ASP.NET MVC4中,当我想使用C#类时,我被迫使用完整的包名.例如,我通常使用:
using MyClasses.More.ExObject;
ExObject myObj = new Exobject();
Run Code Online (Sandbox Code Playgroud)
我被迫明确指定名称空间:
MyClasses.More.ExObject myObj = new MyClasses.More.ExObject();
Run Code Online (Sandbox Code Playgroud)
为什么?