【问题标题】:Replace ID with Name in MVC在 MVC 中将 ID 替换为名称
【发布时间】:2020-11-29 17:03:55
【问题描述】:

我有这个结构:

public struct IdandName
    {
        public IdandName(string id, string name)
        {
            s_ID = id;
            s_Name = name;
        }
        public string s_ID { get; }
        public string s_Name { get; }
    };

例如,有一个IdandName 列表,我想在我的网站上显示s_Name 变量并在我的下拉列表中返回s_ID。我该怎么做?我将示例列表中的所有s_ID 分配给ViewBag.id,以便它可以显示在网站上。

这是我的看法:

@Html.LabelFor(model => model.id, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownListFor(model => model.id, new SelectList(ViewBag.id) )
                @Html.ValidationMessageFor(model => model.id, "", new { @class = "text-danger" })
            </div>```

【问题讨论】:

    标签: c# sql model-view-controller


    【解决方案1】:

    System.Web.Mvc 提供了一个名为SelectListItem 的类,可以与DropDownListFor() 一起使用。您仍然可以将它与您的自定义类型一起使用,如下所示: 我假设您的项目包含示例的“工作”

    public class ViewModel
    {
        private readonly List<IdandValue> jobs;
        
        [Display(Name = "Job")]
        public int SelectedJobId { get; set; }
     
        public IEnumerable<SelectListItem> JobItems
            => new SelectList(jobs, "s_ID", "s_Name");
        // or
        public IEnumerable<SelectListItem> JobItems
            => jobs.Select(j => new SelectListItem { Value = j.s_ID, Text = j.s_Name });
    }
    

    你可以在你的视图中这样称呼它

    @Html.LabelFor(m=>m.SelectedJobId) // just showing the DisplayAttribute.Name "Job"
    @Html.DropDownListFor(m => m.SelectedJobId, Model.JobItems)
    

    您可以为 DropDownListFor 处理此类项目创建自定义扩展方法,但我认为您可以这样做。

    注意:记住 C# 命名约定是 PascalCasecamelCase,因此更喜欢使用“Id”而不是“s_ID”和“Name”而不是“s_Name”

    【讨论】:

      猜你喜欢
      • 2021-06-30
      • 2010-12-01
      • 2014-02-07
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多