【问题标题】:How to get List<object> as parameter in action in ASP.NET Core MVC如何在 ASP.NET Core MVC 中获取 List<object> 作为参数
【发布时间】:2021-06-27 13:42:12
【问题描述】:

我有一个名为“Question.cs”的类,还有一个名为“Answer.cs”的类。 我想向我的操作发送问题列表而不是一个问题,但我不知道该怎么做。 事实上,我不知道如何将问题作为参数。谁能告诉我如何在行动中收到问题? 这是我的课程:

public class Question
{
    [Key]
    public int QuestionId { get; set; }

    [Required]
    [MaxLength(500)]
    public string QuestionTitle { get; set; }
    
    [Required]
    [MaxLength(500)]
    public string QuestionAnswer { get; set; }

    //property
    public List<Answer> Answers { get; set; }
}
public class Answer
{
    [Key]
    public int AnswerId { get; set; }
    [Required]
    public int QuestionId { get; set; }
    [Required]
    [MaxLength(500)]
    public string AnswerTitle { get; set; }
    
    //property
    [ForeignKey("QuestionId")]
    public Question Question { get; set; } 
}

这是我的 Razor 视图(Question.cshtml):

@using GameShop.Data.Domain.QuestIonsAnswers
@model List<GameShop.Data.Domain.QuestIonsAnswers.Question>
@{
    Layout = "~/Areas/Admin/Views/Shared/_AdminLayout.cshtml";
}
<form asp-action="Index" method="POST">
    @foreach (var item in Model)
    {
        <div>@item.QuestionTitle</div>
        <input asp-for="@item.QuestionAnswer" Value="@item.QuestionId" />
        <br />
    }
    <input type="submit" class="btn btn-primary" value="ثبت">
</form>

如您所见,我使用了一个 foreach 循环,它给了我所有的“问题”。所以我不能在我的行动中只收到一个“问题”。这些是我的行动:

public IActionResult Index()
{
    return View(_context.Questions.ToList());
}

[HttpPost]
public IActionResult Index(Question question)
{
    foreach (var item in question)
    {
        var ans=new Answer(){
            QuestionId=item.QuestionId,
            AnswerTitle=item.QuestionAnswer
        };
        _context.Answers.Add(ans);
        _context.SaveChanges();
    }
    return View(_context.Questions.ToList());
}

我想我必须在第二次行动中获得List&lt;Question&gt;,但我不知道如何? 谁能帮我一步一步来?

【问题讨论】:

  • 不确定您的实际意图。您想在页面上只显示一个问题并只提交一个答案吗?您想在您的页面上显示多个问题并单独提交每个答案吗?您想在您的页面上显示多个问题并一次提交所有答案吗?
  • 我想展示我的所有问题并立即提交。假设我的表中有 3 个问题。我想显示所有这些,然后一次将它们全部提交给操作(索引)。

标签: c# asp.net-core-mvc model-binding


【解决方案1】:

请参考以下步骤修改您的代码:

  1. 在 View 页面中,使用for loop 循环遍历 Model 并显示值。代码如下:

     @model List<WebApplication6.Models.Question>
    
     @{
         ViewData["Title"] = "Index";
         Layout = "~/Views/Shared/_Layout.cshtml";
     } 
     <h1>Index</h1> 
     <form asp-action="Index" method="POST">
             @for (var i = 0; i < Model.Count(); i++)
             {
                 <div>@Model[i].QuestionTitle</div>
                 <input asp-for="@Model[i].QuestionId" type="hidden" />
                 <input asp-for="@Model[i].QuestionTitle" type="hidden" />
                 <input asp-for="@Model[i].QuestionAnswer" />
                 <br />
             } 
         <input type="submit" class="btn btn-primary" value="ثبت">
     </form> 
    
  2. 在Post方法中,将参数数据类型改为List&lt;Question&gt;

     [HttpPost]
     public IActionResult Index(List<Question> questions)
     {
         foreach (var item in questions)
         {
             //var ans = new Answer()
             //{
             //    QuestionId = item.QuestionId,
             //    AnswerTitle = item.QuestionAnswer
             //};
             //_context.Answers.Add(ans);
             //_context.SaveChanges();
         }
         return View(_context.Questions.ToList());
     }
    

然后,结果如下:

【讨论】:

  • 非常感谢。这就是我一直在寻找的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
  • 2020-12-13
相关资源
最近更新 更多