返回视图(模型:MyModel);ASP.Net Core Razor 页面中的等效项

Nel*_*ela 4 c# asp.net asp.net-core razor-pages

return Page(model: MyModel);我希望在 ASP Razor Pages 中看到类似的东西。而不是 Page(); 没有参数。

所以我可以返回没有 PageModel 类的页面。

我无法使用 TempData,因为 MyModel 是一种复杂类型。

如何获得与 ASP MVC 相同的功能return View(model: MyModel);

请注意,这个问题不是针对所有 MVC 开发人员,而是针对经验丰富的 ASP.Net Core Razor Page 开发人员。谢谢。

pan*_*ohn 5

好的,这是一个简单的餐厅应用程序的示例。正如您所看到的,Restaurant 对象是 DetailModel 中的一个属性。一旦我将其设置在 OnGet() 方法中。我可以在 Razor 页面视图中访问其数据。

public class DetailModel : PageModel
{
    private readonly IRestaurantData restaurantData;

    [TempData]
    public string Message { get; set; }

    public Restaurant Restaurant { get; set; }

    public DetailModel(IRestaurantData restaurantData)
    {
        this.restaurantData = restaurantData;
    }

    public IActionResult OnGet(int restaurantId)
    {
        Restaurant = restaurantData.GetById(restaurantId);
        if(Restaurant == null)
        {
            return RedirectToPage("./NotFound");
        }
        return Page();
    }
}
Run Code Online (Sandbox Code Playgroud)

以及页面的视图。

@page "{restaurantId:int}"

@model MyProject.Pages.Restaurants.DetailModel
@{
    ViewData["Title"] = "Detail";
}

<h2>@Model.Restaurant.Name</h2>
<div>
    Id: @Model.Restaurant.Id
</div>
<div>
    Location: @Model.Restaurant.Location
</div>
<div>
    Cuisine: @Model.Restaurant.Cuisine
</div>

@if(Model.Message != null)
{
    <div class="alert alert-info">@Model.Message</div>
}

<a asp-page="./List" class="btn btn-default">All Restaurants</a>
Run Code Online (Sandbox Code Playgroud)

真正的 Razor 页面作为一个页面工作,因此您不必返回模型。您只需绑定它,就可以访问该页面。

这有道理吗?另请阅读文档以获取更多信息:https://learn.microsoft.com/en-us/aspnet/core/razor-pages/ ?view=aspnetcore-3.1&tabs=visual-studio