【问题标题】:Access a Model class from Razor Page .cshtml file从 Razor Page .cshtml 文件访问模型类
【发布时间】:2019-08-12 21:02:42
【问题描述】:

我正在尝试创建一个简单的下拉菜单,用本地数据库中的类别填充它。我正在使用 .NET Core 2.2。我正在关注一个使用早期版本的 ASP.NET MVC 的演示,他们使用 ViewBag 将列表从控制器传输到视图。出于某种原因,ViewBag 不起作用,给我一个“ViewBag 在当前上下文中不存在”的编译错误。经过一番研究后,我选择使用 ViewData,它似乎可以从控制器工作,但在显示模型中的类别名称时遇到了一些问题,因为当我运行页面时,下拉选项显示“模型。 Visportfolio.Category”而不是类别名称本身。

我对 HTML 还很陌生,所以我尝试复制演示中的代码,但我无法访问我的 Category 类的字段。根据我的研究,我尝试使用 ViewBag,ViewData 和 ViewBag 是“可互换的”,但没有运气。

我调用下拉菜单的 HTML,代码无法编译,因为它说 CategoryName 和 CategoryId 不包含定义并且没有可访问的扩展方法

    <form asp-controller="my_dropdown" asp-action="CreatePortfolio" method="post" class="form-horizontal" role="form">
        <div class="form-group">
            <div class="row">
                <div class="alert-danger" asp-validation-summary="ModelOnly"></div>
                <div class="col-xs-12 col-sm-6 col-md-6 col-lg-4">
                    <label asp-for="CategoryName" class="control-label"></label>
                    <select asp-for="CategoryId"
                        class="form-control"
                        asp-items="@(new SelectList(ViewBag.categorylist, "CategoryId", "CategoryName"))">
                    </select>
                    @Html.DropDownList("categorylist",
                        new SelectList((System.Collections.IEnumerable) ViewData["categorylist"]), "Select Category","CategoryName" )
                </div>
            </div>
        </div>
        <div class="form-group">
            <div class="row">
                <div class="col-xs-12 col-sm-6 col-lg-4">
                    <input id="Submit1" type="submit" value="submit" />
                </div>
            </div>
        </div>
    </form>

这是html背后的代码

public void OnGet()
        {

            // ----- Getting Data From Database Using EntityFrameworkCore ----
            categorylist = (from category in _context.Category
                            select category).ToList();

            // ----- Inserting Select Item in List -----
            categorylist.Insert(0, new Category { CategoryId = 0, CategoryName = "Select" });

            // ----- Assigning categorylist to ViewBag.ListOfCategory -----
           //  ViewBag.categortyList = categorylist;
            ViewData["categorylist"] = categorylist;
        }

型号

namespace Visportfolio.Models
{
    [Table("Category")]
    public class Category
    {
        [Key]
        public int CategoryId { get; set; }
        public string CategoryName { get; set; }
    }
}

【问题讨论】:

    标签: c# html asp.net


    【解决方案1】:

    你正在寻找

    new SelectList(ViewData[categoryList], "Value", "Text")
    

    SelectList 有很多可以使用的重载,请参阅here

    所以用

    @Html.DropDownList("categorylist",
                        new SelectList((System.Collections.IEnumerable) ViewData["categorylist"], "CategoryId", "CategoryName"), "Select Category","CategoryName" )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      相关资源
      最近更新 更多