【问题标题】:Can I have 2 (or more) different ASP.NET Core programming models in same web-app?我可以在同一个 Web 应用中拥有 2 个(或更多)不同的 ASP.NET Core 编程模型吗?
【发布时间】:2020-01-22 06:37:28
【问题描述】:

我正在使用 Visual Studio 2019 Community16.3.0 Preview 4.0、.NET Core 3.0 RC1、ASP.NET Core 3、Entity Framework 3 RC1

我正在阅读 ASP.NET Core 文档。我知道 ASP.NET Core 有 4 种编程模型:

第一个问题:我想知道,我可以在同一个 Web 应用中拥有 2 个不同的 ASP.NET Core 编程模型吗?

第二个问题:我按照本教程创建了一个 Blazor Web 应用程序:https://docs.devexpress.com/Blazor/401057/getting-started/create-a-new-application,它运行成功。

Blazor

@page "/weather"
<h1>Weather</h1>
<DxTextBox></DxTextBox>

@code { 
    //...
}

我尝试将 ASP.NET Core Razor 页面编程模型放到现有的 Blazor web-app 创建.cshmtml

@page "/Create"
@model RazorPagesMovie.Pages.CreateModel

@{
    ViewData["Title"] = "Create";
}

<h1>Create</h1>

<h4>Movie</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form method="post">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Movie.Title" class="control-label"></label>
                <input asp-for="Movie.Title" class="form-control" />
                <span asp-validation-for="Movie.Title" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Movie.ReleaseDate" class="control-label"></label>
                <input asp-for="Movie.ReleaseDate" class="form-control" />
                <span asp-validation-for="Movie.ReleaseDate" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Movie.Genre" class="control-label"></label>
                <input asp-for="Movie.Genre" class="form-control" />
                <span asp-validation-for="Movie.Genre" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Movie.Price" class="control-label"></label>
                <input asp-for="Movie.Price" class="form-control" />
                <span asp-validation-for="Movie.Price" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

<div>
    <a asp-page="Index">Back to List</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

创建.cshmt.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using acc133blazor.Models;

namespace RazorPagesMovie.Pages
{
    public class CreateModel : PageModel
    {
        private readonly foo.Models.fooContext _context;

        public CreateModel(foo.Models.fooContext context)
        {
            _context = context;
        }

        public IActionResult OnGet()
        {
            return Page();
        }

        [BindProperty]
        public Movie Movie { get; set; }

        // To protect from overposting attacks, please enable the specific properties you want to bind to, for
        // more details see https://aka.ms/RazorPagesCRUD.
        public async Task<IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            _context.Movie.Add(Movie);
            await _context.SaveChangesAsync();

            return RedirectToPage("./Index");
        }
    }
}

我不确定它能否成功运行。我尝试调试网络应用程序,转到 Razor 页面 https://localhost:44303/Create 并出现错误。

但是它的 Blazor 组件集仍然不够用(在 beta 中,只有 12 个组件 https://demos.devexpress.com/blazor/ ),我尝试添加 ASP.NET Razor 页面,或者 ASP.NET Core 控件(ASP.NET Core ViewComponent https://demos.devexpress.com/ASPNetCore/) , 我可以这样做吗?

【问题讨论】:

    标签: c# asp.net-core devexpress asp.net-core-webapi blazor


    【解决方案1】:

    不使用 Blazor 组合在一起没有问题。

    对于 Blazor,虽然您可以将其与 Razor Pages 结合使用,但 asp-page ,asp-for 标签助手将不再起作用。

    参考Blazor Component Embedded in Razor Page

    链接到具有 Blazor 组件的页面,并且所有其他页面链接将不再起作用。您甚至可以使用 Blazor 服务器端应用程序的样板模板应用程序并链接到任何 mvc 视图或 razor 页面来复制相同的情况。所有链接都不再起作用。这必须是启动问题。移除 端点.MapBlazorHub();将允许链接再次工作,但显然会破坏 Blazor 组件。

    对于局部视图/视图组件,它们也不能在 Blazor 中工作,它们可以更改为 razor 组件。

    参考Can you use a ViewComponent in a Blazor layout

    https://github.com/aspnet/Blazor/issues/1066

    【讨论】:

      猜你喜欢
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 2019-05-18
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多