Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用非操作方法的Foreach语句不包含';GetEnumerator';_C#_Asp.net Mvc_Razor_Foreach - Fatal编程技术网

C# 使用非操作方法的Foreach语句不包含';GetEnumerator';

C# 使用非操作方法的Foreach语句不包含';GetEnumerator';,c#,asp.net-mvc,razor,foreach,C#,Asp.net Mvc,Razor,Foreach,我有一个控制器“MessageController”,具有以下非操作方法: [ChildActionOnly] public IEnumerable<string> BackwardsListOfElements() { var allMessages = _messageRepository.GetAll().ToList(); List<string> reversedMessages = new List<

我有一个控制器“MessageController”,具有以下非操作方法:

    [ChildActionOnly]
    public IEnumerable<string> BackwardsListOfElements()
    {
        var allMessages = _messageRepository.GetAll().ToList();
        List<string> reversedMessages = new List<string>();
        for (int i = allMessages.Count-1; i --> 0; )
        {
            reversedMessages.Add(allMessages.ElementAt(i).Subject + ": " + allMessages.ElementAt(i).Body);
        }
        IEnumerable<string> returnEnumerable = reversedMessages;
        return returnEnumerable;
    }
[ChildActionOnly]
公共IEnumerable backwardsListofements()
{
var allMessages=_messageRepository.GetAll().ToList();
List reversedMessages=新列表();
对于(int i=allMessages.Count-1;i-->0;)
{
reversedMessages.Add(allMessages.ElementAt(i.Subject+):“+allMessages.ElementAt(i.Body));
}
IEnumerable returnEnumerable=反向消息;
返回可枚举;
}
它从存储库中获取“消息”,并将其反转,并忽略第一条消息。在我看来,我想把上面的“returnEnumerable”消息添加到一个列表中。以下是我的观点代码:

@model MyProject.UI.Models.MessageModel

@{
    var BackwardsListOfElements = @Html.Action("BackwardsListOfElements", "Message");
}

...

    <a class="btn btn-default dropdown-toggle" data-toggle="dropdown">
        <span class="caret"></span>
    </a>
    <ul class="dropdown-menu" role="menu">
        @foreach(var item in BackwardsListOfElements)
        {
            <li><a href="#">@Html.Label(item.Body)</a></li>
        }
    </ul>
</li>
@model MyProject.UI.Models.MessageModel
@{
var backardslistofelements=@Html.Action(“backardslistofelements”,“Message”);
}
...

}


BackwardsListFements被识别为MvcHtmlString。我有一个编译器错误,读取

Foreach语句无法对“System.Web.Mvc.MvcHtmlString”类型的变量进行操作,因为“System.Web.Mvc.MvcHtmlString”不包含“GetEnumerator”的公共定义

是否可以在不将我的模型声明为IEnumerable的情况下迭代backwardsListFellements?这是否需要编写自己的foreach HTML助手?是否可以显式地将BackwardsListFelments声明为System.Collections.IEnumerable


如果你需要更多信息,请告诉我。提前感谢您的帮助。

因为
@Html.Action(“backardslistofelements”,“Message”)
在childaction方法返回时返回字符串not
IEnumerable

您应该在ViewData或model中传递IEnumerable,然后像下面这样迭代它们

ViewData["someData"] = BackwardsListOfElements()
在您的视图中使用它,如下所示

var data = (IEnumerable<string>) ViewData["someData"]

foreach(var item in data)
{
     //your code here
}

最后,我以IEnumerable的形式传入了我的模型,并按如下方式遍历了模型中的项:

@using Myproject.UI.Helpers
@model IEnumerable<Myproject.UI.Models.MessageModel>

<li class="btn-group">
    <a href="@Url.Action("Index", "Message")" class="btn btn-default">
        <span class="badge">@Html.Action("NumberOfMessages", "Message")</span> @Html.Action("MostRecentMessage", "Message")
    </a>
    <a class="btn btn-default dropdown-toggle" data-toggle="dropdown">
        <span class="caret"></span>
    </a>
    <ul class="dropdown-menu" role="menu">
        @foreach (var item in Model)
        {
            <li>@Html.MenuItem(item.Subject+": "+item.Body, "Index", "Message")</li>
        }
    </ul>
</li>
@使用Myproject.UI.Helpers
@模型IEnumerable
    • @foreach(模型中的var项目) {
    • @MenuItem(item.Subject+“:”+item.Body,“Index”,“Message”)
    • }

  • 我知道我明确表示我不想在我的模型中作为IEnumerable传递,但没有办法。感谢您的回答。

    此行var backardslistofelements=@Html.Action(“backardslistofelements”,“Message”);这就是问题所在。你不需要这样做,这是实现你目标的一种非常愚蠢的方式。你有像viewbag、viewdata这样的东西,所以为什么不使用它们呢?或者如果你想访问任何方法,那么就创建一个controller对象并访问它的公共方法。
    @using Myproject.UI.Helpers
    @model IEnumerable<Myproject.UI.Models.MessageModel>
    
    <li class="btn-group">
        <a href="@Url.Action("Index", "Message")" class="btn btn-default">
            <span class="badge">@Html.Action("NumberOfMessages", "Message")</span> @Html.Action("MostRecentMessage", "Message")
        </a>
        <a class="btn btn-default dropdown-toggle" data-toggle="dropdown">
            <span class="caret"></span>
        </a>
        <ul class="dropdown-menu" role="menu">
            @foreach (var item in Model)
            {
                <li>@Html.MenuItem(item.Subject+": "+item.Body, "Index", "Message")</li>
            }
        </ul>
    </li>