【问题标题】:How to create view for dropdown?如何为下拉菜单创建视图?
【发布时间】:2019-04-16 19:08:03
【问题描述】:

我对下拉菜单的视图有疑问。这是我的代码。 型号:

public class student
{
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int StudentId { get; set; }
    [Display(Name = "Šifra ispitanika:")]
    [Range(1, 9999)]
    public int StudentNumber { get; set; }
    [Display(Name = "Datum rođenja ispitanika:")]
    [DataType(DataType.Date)]
    public DateTime DateBirth { get; set; }
    [Display(Name = "Mjesto rođenja ispitanika:")]
    public string PlaceBirth { get; set; }
    [Display(Name = "Datum testiranja ispitanika:")]
    [DataType(DataType.Date)]
    public DateTime TestDate { get; set; }
    [Display(Name = "Godina rođenja majke:")]
    [Range(1900, 2000)]
    public int MumDate { get; set; }
    [Display(Name = "Godina rođenja oca:")]
    [Range(1900, 2000)]
    public int DadDate { get; set; }

    [Display(Name = "Dropdown_test:")]
    public string MumSport { get; set; }
    [NotMapped]
    public List<SelectListItem> MumSports { set; get; }
}

控制器:

        public async Task<IActionResult> Create([Bind("StudentId,StudentNumber,DateBirth,PlaceBirth,TestDate,MumDate,DadDate,MumSports")] student student)
    {
        if (ModelState.IsValid)
        {
            var MumSports = new student
            {
                MumSports = new List<SelectListItem>
                {
                    new SelectListItem { Text = "nikako", Value = "1" },
                    new SelectListItem { Text = "rekreativno", Value = "2" },
                    new SelectListItem { Text = "amaterski", Value = "3" },
                    new SelectListItem { Text = "profesionalno", Value = "4" }
                }

            };

            _context.Add(student);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        return View(student);
    }

查看:

            <select asp-for="StudentId" asp-items="@(ViewBag.MumSports)">
                <option>Please select one</option>
            </select>
        </div>

问题与视图有关,当我运行我的应用程序时,它会显示下拉列表,但没有我在控制器中创建的数据。我认为这不是创建视图的好方法。有什么想法吗??

【问题讨论】:

  • 在您提供的控制器中,这是创建操作吗?能否提供更多代码。
  • 是的,对不起..这是创建操作..我更新了代码..
  • 您还需要为您的视图添加标记。
  • 我刚做了,谢谢..
  • 分享Create的get操作和ViewBag.MumSports的相关代码。

标签: c# asp.net-mvc asp.net-core razor dropdown


【解决方案1】:

当您使用服务器派生信息填充页面上的任何内容时,您需要确保的一件事是正确传递它。

从您的角度来看,我可以看到您正在寻找 ViewBag.MumSport。因此,这意味着在您的操作的“获取”请求中,您需要使用相关值填充 ViewBag.MumSport。

您编写的控制器看起来也有点混乱......我们通常希望有一个“get(动词)”控制器,您可以使用它来设置页面。我们通常会做一些事情,比如为下拉列表创建值并填充页面所需的任何内容。通常,这里不会保存数据。但是,您似乎正在将下拉列表保存到数据库中?

我相信你可能想要这样的东西:

public IActionResult Create()
{
      ViewBag.MumSport = new List<SelectListItem>
            {
                new SelectListItem { Text = "nikako", Value = "1" },
                new SelectListItem { Text = "rekreativno", Value = "2" },
                new SelectListItem { Text = "amaterski", Value = "3" },
                new SelectListItem { Text = "profesionalno", Value = "4" }
            }

      return View();
}

[HttpPost]
public IActionResult Create(view model goes in here)
{
      Business logic goes here
}

这应该意味着您的下拉列表已被填充,但它也显示了 post 和 get 方法之间的区别。 Post 通常是您创建信息或将信息保存到商店(数据库)的地方。

希望对你有帮助

更新 您可以尝试使用您创建的模型,而不是将所有属性作为 post 方法签名的一部分:

public async Task<IActionResult> Create(student viewModel)

然后您需要确保表单上的输入项的名称与视图模型(学生)匹配:

<select asp-for="StudentId" asp-items="@(ViewBag.MumSports)">

如果你这样做,当你点击控制器时,你的属性应该会自动绑定到 viewModel。这样做的另一个好处是 ModelState.IsValid 将查看该类中的所有属性,并在您提交表单时对它们执行验证。这在使用 [Required] 属性根据需要设置字段时特别有用

【讨论】:

  • 是的,我将 SelectListItem 放在 Post 方法中,但这是错误的。我解决了一个问题,View 和 View 中的数据,但我在控制器中的 post 操作没有绑定所选项目。.跨度>
  • 这是我的发布操作代码: public async Task Create([Bind("StudentId,StudentNumber,DateBirth,PlaceBirth,TestDate,MumDate,DadDate,MumSport")] student student) { if (ModelState.IsValid) { _context.Add(student);等待 _context.SaveChangesAsync(); return RedirectToAction(nameof(Index)); } 返回视图(学生); }
  • 更新了我的答案。提到将视图模型添加到创建方法签名中,这应该会导致表单值绑定到模型,以便您可以使用它们。只需遵循其余表单元素的约定
  • 非常感谢,帮了我很多。我在控制器(发布操作)中绑定数据时遇到问题,但它有效,我不知道如何,但它有效:) 就像我说的,问题是我在发布操作中放置了有关列表项的代码..
猜你喜欢
  • 2019-12-14
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
  • 2021-08-25
相关资源
最近更新 更多