Asp.Net Core 如何将字符串列表各值逐行显示在textarea中
列表内容在textarea逐行显示解决方案
textarea仅支持字符串类型的绑定值,无法直接自动渲染List<string>的每个元素为单独行,你需要先将列表转换为以换行符分隔的字符串,再绑定到textarea,以下是两种可用方案:
- 方案1:调整ViewModel与控制器逻辑(更稳定,推荐)
第一步,给你的PollViewModel新增一个字符串类型的属性,用于textarea绑定:
public class PollViewModel { // 原有其他属性保留 // 如果后续提交需要列表格式,原有AnswerList可保留,否则可删除 public List<string> AnswerList { get; set; } // 新增textarea专用绑定属性 public string AnswerText { get; set; } }
第二步,修改控制器逻辑,将列表拼接为带换行符的字符串:
public async Task<IActionResult> AddOrEditPoll(Guid Id) { var polloptionList = await _admin.GetQuestionsListByPollId(Id); PollViewModel model = new PollViewModel(); // 用系统自带的换行符拼接所有答案,自动适配不同操作系统的换行规则 model.AnswerText = string.Join(Environment.NewLine, polloptionList.Select(item => item.Answer)); return View(model); }
第三步,修改视图代码,绑定新增的字符串属性:
<div class="form-group"> <label class="control-label">Answer</label> <textarea asp-for="AnswerText" class="form-control"></textarea> </div>
如果你提交表单后需要将textarea的内容转回列表格式,用以下代码处理即可:
// 不需要保留空行就保留StringSplitOptions.RemoveEmptyEntries,需要的话删除该参数即可 List<string> answerList = model.AnswerText.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries).ToList();
- 方案2:不改ViewModel,直接在视图渲染(适合临时需求)
直接在textarea内循环输出每个答案加换行,不需要修改控制器和ViewModel:
<div class="form-group"> <label class="control-label">Answer</label> <textarea asp-for="AnswerList" class="form-control"> @foreach (var answer in Model.AnswerList) { @:@answer @: } </textarea> </div>
注意此方案要控制好视图内的缩进空格,避免出现多余的空行或缩进。
内容的提问来源于stack exchange,提问作者sunboy_sunboy
相关产品推荐
相关产品推荐

