首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC c#列表来自ViewBag中的字符串

MVC c#列表来自ViewBag中的字符串
EN

Stack Overflow用户
提问于 2016-12-28 03:05:50
回答 1查看 7K关注 0票数 0

我正在从MS表中检索一个字符串,它可能只是一个名称或分隔名称:例如Tom或扬声器1,扬声器2。

我使用以下方法将该字符串转换为控制器中的列表:

代码语言:javascript
复制
                    Event cevent = db.Events.Find(id); 
                    string speakers = cevent.Speakers;     
                    ViewBag.speakers = "";
                    if (!String.IsNullOrWhiteSpace(speakers) && 
                    speakers.Contains(","))
                    {
                        ViewBag.speakers = speakers.Split(',').ToList();
                    }
                    else
                    {
                        ViewBag.speakers = speakers;
                    }
                    return View(cevent);

在视图中,我使用以下方法显示列表:

代码语言:javascript
复制
         <ul>
            @foreach (var item in ViewBag.speakers)
            {
                <li> @item </li>
            }
        </ul>

很适合这份清单,我得到:

代码语言:javascript
复制
• Speaker 1
• Speaker 2

但是,如果ViewBag只有一项,我得到:

代码语言:javascript
复制
• T 
• o 
• m 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-28 03:12:34

您可以考虑始终将可枚举的扬声器对象传递到视图中,而不管是否存在一个或多个扬声器。

在您的观点中,您正在枚举扬声器对象,在"Tom“的情况下,该对象是一个字符列表。相反,你可以尝试这样的方法:

在主计长中:

代码语言:javascript
复制
ViewBag.speakers = new List<string>();
string speakers = cevent.Speakers;
var listOfSpeakers = speakers.Split(',').ToList();

foreach (var speaker in listOfSpeakers)
{
    ViewBag.speakers.Add(speaker)
}

如果您需要根据是否向视图传递多个扬声器而对HTML进行不同的格式化,则可以在条件块中的扬声器列表上使用if(ViewBag.speakers.Count > 1),并在这种情况下以不同的方式处理输出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41354844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档