如何使用Javascript在ASP.NET核心中创建可重用的组件

时间:2017-10-23 23:40:41

标签: jquery asp.net-core asp.net-core-viewcomponent

自从转向MVC以来,我一直想知道(现在需要)一个可重复使用的组件"我可以坚持任何对每个视图都有共同点的视图,并在该组件中包含jQuery。我正在谈论View Components并且它们很整洁,但我还没有遇到过它们的可行需求(除了显示地址或电话号码)。什么都没有真正互动。

因此,如果我无法使用View Component执行此操作,我该怎么办?我有一个使用JavaScript的View Component,但这只是因为我无法引用我在Layout中定义的部分。我已经阅读了数十篇文章,声明这是设计的。嗯,在我看来,这是一个糟糕的设计,并将这些组件锁定为非交互(或有限)。

2 个答案:

答案 0 :(得分:1)

创建服务:

public class MyViewContext
{
    public bool IsJqueryRequired { get; set; }
    public object MyAwesomeSharedObject { get; set; }
}

然后将其添加到作为范围的DI容器(每个新请求都创建了Scoped):

services.AddScoped<MyViewContext, MyViewContext>();

在您的视图中,您可以通过以下方式访问它:

@inject MyViewContext MyViewContext

使用constructor injection简单地使用其他任何地方。

另一个很好的选择是使用TagHelper和TagHelperContextHere是一篇很棒的文章。

答案 1 :(得分:0)

  

我一直想知道(现在我需要)一个可重复使用的“组件”,我可以坚持任何观点

我认为你要找的是templates。它可以重复使用,因为模型可以有显示和编辑模板。它非常简单:

可重复使用:

public class Car
{
  public string Model { get; set; }
}

控制器型号:

public class IndexVM
{
  public Car Car { get; set; }
}

index.cshtml

@model IndexVm

@Html.DisplayFor(m => m.Car)

共享/ displaytemplates / car.cshtml

@model Car

@Html.DisplayFor(m => m.Model)

至于脚本,只需要渲染JS的想法很久以前就消失了。这就是Bootstrap有bootstrap.min.js,bootstrap.min.css的原因。没有充分的理由不将捆绑所有内容放在一起,以便客户端可以一次性缓存它。

查看组件我觉得在MVC中有点hacky。它们是MVC和WebPages中工作的所有内容,但并未真正考虑过。

More Reading