Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何用Javascript在ASP.NET内核中创建可重用组件_Jquery_Asp.net Core_Asp.net Core Viewcomponent - Fatal编程技术网

Jquery 如何用Javascript在ASP.NET内核中创建可重用组件

Jquery 如何用Javascript在ASP.NET内核中创建可重用组件,jquery,asp.net-core,asp.net-core-viewcomponent,Jquery,Asp.net Core,Asp.net Core Viewcomponent,自从迁移到MVC以来,我一直想知道(现在我需要)一个可重用的“组件”,我可以坚持使用任何视图,这些视图可以执行每个视图都通用的操作,并在该组件中包含jQuery。我说的是视图组件,它们很整洁,但我还没有找到对它们的可行需求(除了显示地址或电话号码)。没有真正的互动 那么,如果我不能用视图组件来实现这一点,我该怎么办?我有一个利用JavaScript的视图组件,但这只是因为我无法引用我在布局中定义的部分。我读过几十篇文章说这是故意的。嗯,在我看来,这是一个糟糕的设计,并将这些组件锁定为非交互式(或

自从迁移到MVC以来,我一直想知道(现在我需要)一个可重用的“组件”,我可以坚持使用任何视图,这些视图可以执行每个视图都通用的操作,并在该组件中包含jQuery。我说的是视图组件,它们很整洁,但我还没有找到对它们的可行需求(除了显示地址或电话号码)。没有真正的互动

那么,如果我不能用视图组件来实现这一点,我该怎么办?我有一个利用JavaScript的视图组件,但这只是因为我无法引用我在布局中定义的部分。我读过几十篇文章说这是故意的。嗯,在我看来,这是一个糟糕的设计,并将这些组件锁定为非交互式(或受限)

创建服务:

public class MyViewContext
{
    public bool IsJqueryRequired { get; set; }
    public object MyAwesomeSharedObject { get; set; }
}
然后将其添加到DI容器作用域(每次新请求都会创建作用域):

任何地方都可以通过简单的使用

另一个很好的选择是使用TagHelper和
TagHelperContext
。这是一篇关于它的好文章

我一直想知道(现在我需要)一个可重用的“组件”,我可以坚持在任何视图上

我想你要找的是。它是可重用的,因为模型可以有显示和编辑器模板。它非常简单,如下所示:

可重复使用:

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)
共享/显示模板/car.cshtml

@model Car

@Html.DisplayFor(m => m.Model)
至于脚本,只呈现所需JS的想法在很久以前就消失了。这就是为什么Bootstrap有Bootstrap.min.js、Bootstrap.min.css。没有理由不将所有内容捆绑在一起,这样客户端就可以一次缓存所有内容

我觉得MVC中的视图组件有点粗糙。它们在MVC和网页中都能起作用,但并没有被真正考虑出来


我会在依赖项注入容器中添加一个作用域服务
MyViewContext
,这将允许您共享一些元素。如果您需要它,简单地注入它。我同意您对视图组件的想法。我从未想过使用模板。我目前正在为其他模型使用编辑器模板,因此没有理由不能在任何视图上为“组件”应用相同的概念。谢谢你给我的答案@Christian。使用构造函数注入的概念实际上很有意义,我可能不得不试一试,看看我是否喜欢这个结果。
@model IndexVm

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

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