如何使用ASP.NET Core Razor页面在下拉菜单中预先选择项目

时间:2018-08-27 01:46:49

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

如果有帮助,我们将使用ASP.NET Core 2.1和Razor页面(不是传统的MVC)

我在进行选择工作时遇到问题。我们使用SelectListItem列表为页面生成选项列表,该列表引入了枚举,并将其放在asp项中,并且效果很棒。对于我们的asp-for,我们使用的标签会增加,因为其中包含一些下拉列表。

<select asp-for="@Model.Answers[answerOptionIndex].AnswerText" 
        asp-items="@Model.CriticalIllnessTierSelectListItems" 
        class="form-control">
    <option></option>
</select>

对于添加产品而言,这非常有用,asp-for生成Answers[0].AnswerText作为名称,Answers_0__AnswerText作为id,这太棒了。

麻烦的是,我们需要能够编辑现有表单,以便预先填充值,我发现您可以为此使用asp-for,因此我将{{1}输入@answerTextForQuestion }},然后在页面加载时预先选择了正确的选项...但是,这却弄乱了我的ID和名称。

当我这样做时,我得到这个:

asp-for

奇怪的是它没有放置值<select name="answerTextForQuestion" class="form-control" id="answerTextForQuestion"> ,而是放置了变量。

我尝试将名称和ID手动设置为answerTextForQuestion,并将@Model.Answers[answerOptionIndex].AnswerText保留为asp-for,但是它忽略了它,仍然在@answerTextForQuestion中输入问题和答案。

我不知道我的蛋糕怎么吃。我需要我的as-for为@answerTextForQuestion,但我也需要它选择@Model.Answers[answerOptionIndex].AnswerText中的任何一个值。因为我们使用的是@answerTextForQuestion,所以我不能只将选择的属性放在正确的属性上。

我发现了一个堆栈溢出,该堆栈试图使用循环,如果选定的项目与SelectListItem相匹配,则将选定的属性设为true,但该属性不起作用,我读了选定的注释我将其加粗,因为我担心它会被重复发表。

编辑:更好的标题可能是另外一个属性,我可以使用该属性告诉浏览器不使用ASP-FOR应该预先选择哪个选项。我们有很多我们的AJAX基于ASP-FOR使用的名称和ID构建,但是我只需要这一功能。我看了看C#文档,但什么也没看到。

1 个答案:

答案 0 :(得分:1)

要在下拉列表中预先选择一个项目,您可以参考以下示例中的部分代码

1。在Edit.cshtml

<div class="form-group">
            <label asp-for="Movie.Genre" class="control-label"></label>
            <select  asp-for="Movie.Genre.Id" asp-items='(List<SelectListItem>)ViewData["Genres"]'></select>
        </div>

2。在Edit.cshtml.cs

模型绑定

[BindProperty]
    public Movie Movie { get; set; }

    public Genre Genre { get; set; }

OnGetAsync()

 Movie = await _context.Movie
                     .Include(m => m.Genre)
                     .SingleOrDefaultAsync(m => m.Id == id);

 ViewData["Genres"] = _context.Genre.Select(g => new SelectListItem { Value = g.Id.ToString(), Text = g.Name }).ToList();