Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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
视图组件的Javascript应该放在哪里?_Javascript_C#_Asp.net Core_Asp.net Core Viewcomponent - Fatal编程技术网

视图组件的Javascript应该放在哪里?

视图组件的Javascript应该放在哪里?,javascript,c#,asp.net-core,asp.net-core-viewcomponent,Javascript,C#,Asp.net Core,Asp.net Core Viewcomponent,我已经习惯了MVC6,几年前我问过关于局部视图的问题。如果我构建了一个视图组件,它封装了一个需要自己的Javascript的公共用例,那么我应该把Javascript放在哪里呢?我知道在部分视图中使用Javascript是很简单的,但是将其包含在视图组件中要简单得多,而不是包含在包含视图或包含视图必须引用的单独文件中 例如,假设我有一个视图组件,它有两个下拉列表。第一个下拉列表中的选择确定第二个下拉列表中显示的项目。当然,这在Javascript中很容易处理,但我应该把它放在哪里呢?根据我使用A

我已经习惯了MVC6,几年前我问过关于局部视图的问题。如果我构建了一个视图组件,它封装了一个需要自己的Javascript的公共用例,那么我应该把Javascript放在哪里呢?我知道在部分视图中使用Javascript是很简单的,但是将其包含在视图组件中要简单得多,而不是包含在包含视图或包含视图必须引用的单独文件中


例如,假设我有一个视图组件,它有两个下拉列表。第一个下拉列表中的选择确定第二个下拉列表中显示的项目。当然,这在Javascript中很容易处理,但我应该把它放在哪里呢?

根据我使用ASP.NET 5视图组件的经验,我认为使用它们最好的方法是将它们隔离在一个地方,以便在长期项目中易于管理

在我的一个ASP.NET项目中,我开发了如下视图组件结构:

视图、后端代码和模型都在一个位置,所以当您在文件夹中移动时,您可以确保您移动了整个组件。此外,当您修改它们时,您可以快速访问它们的所有部分

将与组件高度耦合的JavaScript也放在这样的结构中会很方便。您只需在组件的文件夹下创建文件,然后编写一个将JS文件复制到wwwroot的GULP任务即可。从那时起,您将能够使用标准语法在组件的.cshtml上链接JavaScript代码:

<script src="~/Components/yourcomponent.js"></script>
ViewLocationExpander类是:

public class ViewLocationExpander : IViewLocationExpander
{
    protected static IEnumerable<string> ExtendedLocations = new[]
    {
        "/{0}.cshtml"
    };

    public void PopulateValues(ViewLocationExpanderContext context)
    {
        //nothing here
    }

    public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
    {
        //extend current view locations
        return viewLocations.Concat(ExtendedLocations);
    }
}

据我所见,视图中的Javascript组件的处理方式类似于片段,但可以使用建议的方法或类似方法进行隔离。只要我不做任何愚蠢的事情,就可以将Javascript隔离以查看组件。谢谢关于将javascript添加到组件的方式,如果在一个视图中多次放置同一个组件,会不会产生问题?这意味着您将有多个具有相同源的
标记,或者我遗漏了什么?是的,这是一个很好的观点,但是它很容易处理,即如果以前使用过组件,则保存临时bool标志
public class ViewLocationExpander : IViewLocationExpander
{
    protected static IEnumerable<string> ExtendedLocations = new[]
    {
        "/{0}.cshtml"
    };

    public void PopulateValues(ViewLocationExpanderContext context)
    {
        //nothing here
    }

    public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
    {
        //extend current view locations
        return viewLocations.Concat(ExtendedLocations);
    }
}
@await Component.InvokeAsync("NavigationComponent",new NavigationComponentModel())