asp.net MVC对于共享部分视图的控制器的正确位置

时间:2017-02-10 15:30:31

标签: c# asp.net asp.net-mvc razor

项目目录中共享部分视图控制器的最佳位置在哪里?

我发现了类似的问题:ASP.NET MVC: Correct place for Partial Views?

我无法决定是否更好地执行/ Controller / Shared / CONTROLLER_FOR_PARTIAL_VIEW之类的操作,或者只创建其独立的文件夹,如/ Controller / CONTROLLER_FOR_PARTIAL_VIEW

部分视图专门用于dropdownlistfor,并且该模型不会用于填充下拉列表以外的任何内容。因此,如果一个站点有许多下拉列表或一般只有部分视图,共享文件夹似乎是最好的选择。如果它是共享文件夹的首选方式,您是为每个局部视图使用一个控制器,还是为所有局部视图使用一个控制器?感谢任何想法或反馈,谢谢!

编辑:要清楚,我特别询问了控制器的目录而不是VIEWS。谢谢!

2 个答案:

答案 0 :(得分:2)

从某种意义上说,没关系。没有真正的标准或惯例,所以你可以自由地做到这一点,但它对你和你的应用程序最有意义。

将它放在像Controllers/Shared这样的东西下可能有意义,如果有足够的这些值得,它会增加价值,使它们与常规控制器分开。但是,就项目而言,所有基本上都是共享的,所以这里没有真正的区别。就个人而言,简单地将它命名为独特的东西可能是最好的路线。例如,我的一个项目中有许多子操作,这些操作在我的布局的各个部分中使用。结果,我创建了一个LayoutController来容纳这些。

要记住的一件事是,如果您使用标准路由,任何控制器都可用于路由基础架构,无论它位于项目树中的哪个位置。您必须非常了解如何实现它,但如果您将共享控制器命名为SharedController,那么使用标准路由,其操作将通过/shared/action提供。对于像子操作这样的事情,使用[ChildActionOnly]可以轻松解决这个问题。通过将该属性添加到子操作,它将与URL请求的路由基础结构分离。但是在内部,MVC仍然可以为了渲染视图而使用它。

答案 1 :(得分:1)

我参与过的项目位于/Area/Controllers/SharedPartialController.cs,并且该视图的命名位于/Area/Views/SharedPartial/_MenuDropdown.cshtml

希望您在MVC项目中使用“区域”,在这种情况下,我建议每个区域使用一个共享控制器。

即。 /Order/Controllers/TabsPartialController.csOrder区域相关的/User/Controllers/NavTabsPartialController.cs,然后是import React, { Component } from 'react'; import { View, Text } from 'react-native'; import Meta from './Meta'; import Button from './Button'; class Metas extends Component { componentWillMount() { this.setState({ metas: this.props.data, }); } addMeta = (newMeta) => { console.log('Adding new meta'); /*this.props.navigator.push({ id: 'Test' });*/ const metas = this.state.metas; metas.push(newMeta); this.setState({ metas }); console.log(`Metas: ${metas}`); } renderData = () => { console.log('rendering metas data'); return this.state.metas.map(meta => <Meta key={Math.random()} name={meta} />); } render() { return ( <View> { this.renderData() } <View> <Text>{this.state.metas.length} Metas</Text> <Button text='+' color='#8783FF' fontColor='white' size='50' fontSize='25' onPress={this.addMeta('New Meta')} /> </View> </View> ); } } export default Metas; 等。