将数据从列表显示到剃刀视图

时间:2018-04-24 13:41:36

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

我希望将我的列表(字符串)的所有值显示到剃刀视图中,但不使用" foreach"方法

我已经得到了这个,但剩下要展示的唯一一个是List<Answer>

   @Model PoolManager.Models.Question
 @{
ViewData["Title"] = "Details";
}
<h2>Details</h2>
<table class="table">
<thead>
    <tr class="bg-primary">
        <th>Question</th>
        <th>Answers</th>
        <th>Starting Date</th>
        <th>Ending Date</th>
        <th>Active</th>
        <th>Details</th>
        <th>Edit</th>
        <th>Delete</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td class="bg-info">@Model.Text</td>
        @for (int i = 0; i < Model.Answers.Count; i++)
        {
            String Resposta = Model.Answers[i].ToString();
            <td class="bg-info" @Resposta></td>
        }

        <td class="bg-info">@Model.StartDate</td>
        <td class="bg-info">@Model.EndDate</td>
        <td>
            <a asp-action="Edit" asp-route-id="@Model">Edit</a> |
            <a asp-action="Details" asp-route-id="@Model.Id">Details</a> |
            <a asp-action="Delete" asp-route-id="@Model.Id">Delete</a>
        </td>
    </tr>
</tbody>

到目前为止我已经这样了,但它只计算答案的数量,但我需要输出答案而不是它的ID。

  @for (int i = Model.Answers.Count; i >= 0; i--)
  {          
      String Resposta = Model.Answers.ToString();

      <td class="bg-info" @Resposta></td>
  }

我得到的输出是:

  

system.collections.generic.list`1 [poolmanager.models.answer]

2 个答案:

答案 0 :(得分:1)

首先,你应该修复你的表格部分,现在看起来很糟糕。

其次,如果您只想显示1个项目,那么您就无法使用表格,这是无意义的。

第三; 在你的控制器

  

ActionResult MyPage(){}

方法,您可以通过临时用法发送答案列表。

public ActionResult MyPage(){

     List<PoolManager.Models.Question> questionList = dbModel.Questions.ToList();

     TempData['answerList'] = dbModel.Answers/*.Where(//IF YOU WANT A WHERE CLAUSE YOU CAN WRITE HERE AS WELL)*/.ToList();
     //We just sent List<Answers> inside that TempData["answerList"], we will cast it in RazorPage later.

     return View(questionList);
}

这样做之后,你应该使用

  

@model List<PoolManager.Models.Question>

位于Razor页面的顶部。 因为我们正在发送PoolManager.Models.Question个对象的列表。 在这里,我假设你正在使用Bootstrap Modal。如果没有,您可以将其用作每个Answer单元格中的div和这些div中的另一个表格。 让我们看看我的方式:

<table class="table">
    <thead>
        <tr class="bg-primary">
            <th>Question</th>
            <th>Answers</th>
            <th>Starting Date</th>
            <th>Ending Date</th>
            <th>Active</th>
            <th>BUTTON LINKS</th>
        </tr>
    </thead>
    <tbody>
        @foreach(var question in Model)
        {
        <tr>
            <td class="bg-info">@question.Text</td>
            <td class="bg-info">
                <a href="#" class="btn btn-primary" data-target="#myModalId_@question.questionId" data-toggle="modal">Answers</a>
            </td>
            <td class="bg-info">@question.StartDate</td>
            <td class="bg-info">@question.EndDate</td>
            <td></td>
            <td>
            <a asp-action="Edit" asp-route-id="@question">Edit</a> |
            <a asp-action="Details" asp-route-id="@question.Id">Details</a> | 
            <a asp-action="Delete" asp-route-id="@question.Id">Delete</a>
            </td>
        </tr>
        }
    </tbody>
</table>

我们刚刚完成了表格部分,让我们填写内部模态。 您需要将TempData [&#34; answerList&#34;]转换为我们之前在Controller中描述的List类。

@foreach(var question in Model)
{
    <div class="modal fade" id="myModalId_@question.questionId" tabindex="-1" role="dialog" aria-labelledby="myModalId_@question.questionId">
        <div class="modal-dialog modal-lg" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                    <h4 class="modal-title" id="myModalId_@question.questionId">Looking at @question.Text 's answers</h4>
                </div>
                <div class="modal-body">
                    @foreach(var answer in ((List<Answers>)TempData["answerList"]).ToList() )
                    {
                        <div class="row">
                            @answer.Text
                        </div>
                    }
                </div>
            </div>
        </div>
    </div>
}

我希望这对你有很大的帮助。

答案 1 :(得分:1)

在for循环中,您可以使用索引获取每个Answer in列表中的值。例如:

 @for (int i = Model.Answers.Count; i >= 0; i--)
    {
        string Resposta = Model.Answers[i].ToString();
        <td class="bg-info">@Resposta</td>
    }

上面的代码将帮助您使用for循环本身获取存储在每个索引中的值。