如果有帮助,我们将使用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#文档,但什么也没看到。
答案 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();