Razor 页面 - .NET 8.0 - 模型绑定? - 实体框架

问题描述 投票:0回答:1

很抱歉打扰你们,但我需要帮助从实体框架获取我的信息。我不知道我错过了什么。

我正在使用 Razor 页面。我已经运行了我的页面,我在本地窗口中看到了所有值。我可以看到我可以为我的一个订单想象的每个字段。所以,这部分我没有任何问题。

当我返回页面时出现问题:

public async Task<IActionResult> OnGetAsync()
{
    string id = TempData["id"]?.ToString();

    if (id == null)
    {
        return NotFound();
    }

    var x = await _context.dbTable.SingleOrDefaultAsync(e => e.order_id == id);

    if (x != null)
    {
        return Page();
    }
    
    return NotFound();
}

我完全看到了我的临时数据,但是当页面返回时,我的模型中的所有内容都变为空。我什至无法做一个简单的

@Html.DisplayFor(model => model.id)
来查看它是否显示。

我不是在寻求解决方案,我只是想知道要寻找什么。我一直在谷歌上搜索 YouTube、ChatGPT 和 Gemini,但我遗漏了一些东西。

如果有帮助,我可以在

ViewData
中看到我的值,如果我查看
Model.ViewData[0]
,然后打开它,我会看到技术上返回的整个查询。只是模型变成了null而已。

c# razor .net-8.0
1个回答
0
投票

根据你的代码,你的id和X对象内的所有方法在方法完全排除后无法访问。

如果您想将一些值从 razor 页面模型类传递到 razor 视图,您应该首先在类中设置模型对象或属性,然后为其设置值。

例如,如果你想将 id 传递给 razor 视图。

public class IndexModel : PageModel
{
    private readonly ILogger<IndexModel> _logger;
    //create the property to store the value 
    public string? id { get; set; }
    //create the property to store the value 
    public  Movie Movie { get; set; } = default!;
    public IndexModel(ILogger<IndexModel> logger)
    {
        _logger = logger;
    }

    public async Task<IActionResult> OnGetAsync()
    {
         //set the value
        // id = TempData["id"]?.ToString();
        id = "test";
        //Movie = await _context.dbTable.SingleOrDefaultAsync(e => e.order_id == id);
        //set the value for testing
        Movie = new Movie { Id = 1, Name = "test1" };
        return Page();
    }
}

public class Movie
{
    public int Id { get; set; }
    public string Name { get; set; }
}

剃须刀页面:

id:
@Html.DisplayFor(modelItem => Model.id)

<hr />

name :  @Html.DisplayFor(modelItem => Model.Movie.Name)

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.