Angular 路由模板 url 是否支持 ASP.Net MVC 5 项目中的 *.cshtml 文件?

IT技术 javascript c# angularjs asp.net-mvc razor
2021-02-20 00:06:39

我正在研究 MVC 5 项目。当我在视图中使用 html 页面时,它会加载该页面,但是当我使用 .cshtml 页面时,它不会加载视图。出现空白页。

$urlRouterProvider
    .otherwise('/app/dashboard');

$stateProvider            
    .state('app', {
        abstract: true,
        url: '/app',
        templateUrl: 'tpl/app.html'
    })
    .state('app.dashboard', {
        url: '/dashboard',
        templateUrl: 'tpl/app_dashboard.html'
    })

请指导我如何使用 cshtml 文件或使用它的最佳方法。

4个回答

是的你可以。

添加一个类似的答案到Yasser's,但使用 ngRoute:

1) 而不是引用您的部分 HTML,您需要将控制器/操作引用到您的 ASP.NET MVC 应用程序。

.when('/order', {
    templateUrl: '/Order/Create',
    controller: 'ngOrderController' // Angular Controller
})

2) 你的 ASP.NET MVC 将返回一个 .cshtml 视图:

public class OrderController : Controller
{
    public ActionResult Create()
    {
        var model = new MyModel();
        model.Test= "xyz";

        return View("MyView", model);
    }
}

3) 您的 MyView.cshtml 将混合 Razor 和 Angular。注意:作为您的 Angular 应用程序的一部分,请将布局设置为 null。

@model MyProject.MyModel

@{
   Layout = null;
}

<h1>{{ Test }}</h1> <!-- Angular -->
<h1>Model.Test</h1> <!-- Razor -->
这应该被标记为正确答案。这也是我在向下滚动之前奇怪地解释 Yasser 同样可行的解决方法的方式。我只是绝对更喜欢这个,因为它似乎可以很好地结合使用 Razor 和 Angular!方便的是,你添加了一些我不得不摸索才能弄清楚的东西。谢谢!
2021-04-23 00:06:39
讨论晚了,但是您如何将 Angular 的模型(在您的示例中为 Test)绑定到 Razor 的模型(Model.Test)?我试过这个,但没有用。我一开始没想到它可以工作,因为 ASP.NET MVC 控制器返回 html,而不是 json 对象,所以如果你不能使用它,那么拥有一个有角度的视图模型有什么意义。我想你可以在 angular 的控制器中调用服务器来获取视图模型,但这是到服务器的第二次往返,不是吗?你怎么能一通电话呢?
2021-05-06 00:06:39
这对我很有帮助。
2021-05-10 00:06:39

你不能。

您不能在角度路线的模板 url 中使用 .cshtml 文件的路径。你能在浏览器中打开 .cshtml 文件吗?无权利 ?同样的事情在这里也适用。

解决方法:

.cshtml 文件包含服务器端代码,要呈现它,您需要使用控制器和操作。他们将为您呈现该 .cshtml 文件。因此,让控制器操作为您返回该视图,并在您的角度路线中使用控制器操作的 url。

例如:

state('app.dashboard', {
        url: '/dashboard',
        templateUrl: '/dashboard/index'
     })

public class DashboardController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

ps:试过了,这对我有用

谢谢这个建议!它也适用于 Angular 2 和 Typescript。我只是在我的组件中使用它:@Component({ selector: 'login', templateUrl: 'Account/Login' })
2021-04-23 00:06:39

您不能混合使用 angularJs 和 Razor 视图,razor 加载在服务器中,而 angular 在客户端中运行它使用在浏览器中运行的 javascript 来呈现视图,这就是为什么人们倾向于在您的情况下使用 rest api 作为后端由于您使用的是 .net,因此它可能是 Web API 或服务堆栈。

您可以做的是将 razor 视图作为主“索引页面”执行,但从那里让 angularjs 处理“内部”页面的路由。

请记住,angular 是建立在单页应用程序的思想之上的,它是asp.net mvc 体系结构的不同视角。

你是对的,但现在我在路由 cshmtl 页面时遇到困难。我想在 ng-view 中加载 cshtml 视图页面,并让 angular js 进行路由而不是 mvc。你能帮我吗??
2021-04-24 00:06:39
对于内部页面,我的意思是 angular 处理您的应用程序的 html 页面的完整路由,查看他们使用我在回答中描述的相同逻辑处理的 meanjs 组织
2021-05-07 00:06:39
所以在您的回答中提到了这一行:“但是从那里让 angularjs 处理“内部”页面的路由。在这一行中,您指的是哪些内部页面?html 或 cshtml 页面?
2021-05-12 00:06:39
好吧,如果您不知道从哪里开始,我建议您使用 yeoman,然后用布局/主页视图的组合替换为您生成的 index.html,我个人使用这种方式来构建我的 angularjs 应用程序github .com/cgross/generator-cg-angular
2021-05-17 00:06:39
我不这么认为,可能您可以在角度路由中引用任何 mvc 服务器路由/动作结果,但恕我直言,这对我来说感觉很脏:)
2021-05-21 00:06:39

cshtml 本质上是具有 razor 语法的内联 csharp 代码,并在服务器站点上呈现为 html,因此您不能在角度路由中使用,因为浏览器无法识别 c#

你可以调用它只是浏览器不会识别它,最好的选择是将它显示为文本文件
2021-04-26 00:06:39
那么,有没有其他方法可以调用 .cshtml 文件而不是 html?
2021-05-01 00:06:39