【问题标题】:return View(model: MyModel); equivalent in ASP.Net Core Razor Pages返回视图(模型:MyModel);等效于 ASP.Net Core Razor 页面
【发布时间】:2020-04-01 03:49:59
【问题描述】:

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

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

我不能使用 TempData,因为 MyModel 是一个复杂类型。

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

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

【问题讨论】:

标签: c# asp.net asp.net-core razor-pages


【解决方案1】:

好的,这里是一个简单餐厅应用的示例。 如您所见,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();
    }
}

以及来自页面的视图。

@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>

Razor 页面确实是一个页面,因此您不必返回模型。您只需绑定它,您就可以在页面内访问。

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

【讨论】:

  • 我要返回的页面没有PageModel。
  • 请提供一个可重现的小例子。这根本不符合逻辑。为了拥有一个剃须刀页面,您需要一个派生自 PageModel 的类。您正在尝试正确返回复杂对象吗?我错过了什么吗?
  • 如果您想拥有与 MVC 相同的功能,您的 ASP.NET Core 可以改用 MVC 模式。
  • 嗯,我不认为你可以随心所欲。 Razor 页面不是这样构建的。还有你为什么需要这样?
  • 还有一条评论,您可以看到默认 ASP.NET Web Api 路由是如何设置的。非常接近 Razor 页面的设置,但是使用了 MVC 模式。
猜你喜欢
  • 2019-03-12
  • 2018-12-20
  • 2020-02-09
  • 2020-08-16
  • 2018-02-24
  • 2019-06-03
  • 2018-11-26
  • 2020-10-01
  • 2018-09-04
相关资源
最近更新 更多