【问题标题】:how do i pass values from foreach so as to create a new list of model?如何从 foreach 传递值以创建新的模型列表?
【发布时间】:2020-05-20 09:45:34
【问题描述】:
@model IEnumerable<OnlineExam.Models.CandidateExam.CandidateExam>


@{
    ViewData["Title"] = "Index";
    var questionList = JsonConvert.DeserializeObject<List<OnlineExam.Models.AdminQuestionModel.QuestionAndAnswers>>(TempData["questionList"].ToString());
    var data = questionList as IEnumerable<OnlineExam.Models.AdminQuestionModel.QuestionAndAnswers>;
    TempData.Keep();

}

<h1>Index</h1>

<p>
    <a asp-action="Create">Create New</a>
</p>
@{
    int count = 0;
}
@foreach (var item2 in Model)
{
    @foreach (var item in data)
    {
        count = count + 1;
        <table class="table" style="background-color:lavender">
            <tbody>
                <tr class="border-light"><td>Question @count :   @item.Question</td></tr>
                <tr class="bg-light"><td>Options : </td></tr>
                <tr class="border-light"><td><input asp-for="@item2.OptionSelected" type="radio" name="counter" value="@item.OptionTwo" /> a) @item.OptionOne</td></tr>
                <tr class="bg-light"><td><input asp-for="@item2.OptionSelected" type="radio" name="counter" value="@item.OptionTwo" /> b) @item.OptionTwo</td></tr>
                <tr class="border-light"><td><input asp-for="@item2.OptionSelected" type="radio" name="counter" value="@item.OptionThree" /> c) @item.OptionThree</td></tr>
                <tr class="bg-light"><td><input asp-for="@item2.OptionSelected" type="radio" name="counter" value="@item.OptionFour" /> d) @item.OptionFour</td></tr>

            </tbody>
        </table>
        <br />
    }
}
<div class="form-group">
    <input type="submit" value="Submit" class="btn btn-primary" />
</div>

.................................................. .....................................................
基本上我想将数据从项目加载到项目 2 即:我想将值从一个 foreach 提供给模型(IEnumerable)。我该怎么做?

【问题讨论】:

  • 您能分享一下您的CandidateExamQuestionAndAnswers 型号吗?您的控制器是什么样的?
  • rena 谢谢你的帮助..你真是太好了..我无法使用 foreach 循环将数据绑定到模型..但是 for 循环 cud 绑定数据..从而解决了我的问题问题..

标签: asp.net-mvc asp.net-core razor razor-2


【解决方案1】:
@model OnlineExam.Models.CandidateExam.CandidateItem
@{
    ViewData["Title"] = "Index";
    var questionList = JsonConvert.DeserializeObject<List<OnlineExam.Models.AdminQuestionModel.QuestionAndAnswers>>(TempData["questionList"].ToString());
    //var data = questionList as IEnumerable<OnlineExam.Models.AdminQuestionModel.QuestionAndAnswers>;
    var data2 = questionList as List<OnlineExam.Models.AdminQuestionModel.QuestionAndAnswers>; //new stackov
    int examAttemptId = Convert.ToInt32(TempData["examAttemptId"].ToString());
    TempData.Keep();

}

<h1>Index</h1>

    <p>
        <a asp-action="Create">Create New</a>
    </p>
    <div>
        <form enctype="multipart/form-data" asp-action="AnswerExam">

            @{
                int counter = 0;
            }
            @for (var i = 0; i < data2.Count(); i++)
            {
                counter = counter + 1;
                <input type="hidden" asp-for="candidateExamsList[i].ExamId" value="@data2[i].ExamId" />
                <input type="hidden" asp-for="candidateExamsList[i].QuestionId" value="@data2[i].QuestionId" />
                <input type="hidden" asp-for="candidateExamsList[i].ExamAttemptId" value="@examAttemptId" />
                <span>Question @counter) </span>@data2[i].Question.ToString()<br />
                <span>Options : </span><br />
                <span>a) </span>@Html.RadioButtonFor(x => x.candidateExamsList[i].OptionSelected, data2[i].OptionOne) @data2[i].OptionOne;<br />
                <span>b) </span>@Html.RadioButtonFor(x => x.candidateExamsList[i].OptionSelected, data2[i].OptionTwo) @data2[i].OptionTwo;<br />
                <span>c) </span>@Html.RadioButtonFor(x => x.candidateExamsList[i].OptionSelected, data2[i].OptionThree) @data2[i].OptionThree;<br />
                <span>d) </span>@Html.RadioButtonFor(x => x.candidateExamsList[i].OptionSelected, data2[i].OptionFour) @data2[i].OptionFour;<br /><br />
            }

            <div class="form-group">
                <button type="submit" value="Submit" class="btn btn btn-primary" />
            </div>
        </form>
        </div>

这就是我解决问题的方法。我使用 for 循环而不是 foreach 循环将数据从列表绑定到模型。

【讨论】:

    【解决方案2】:

    这是一个工作演示:

    1.型号:

    public class CandidateExam
    {
        public int Id { get; set; }
        public string OptionSelected { get; set; }
    }
    public class QuestionAndAnswers
    {
        public int Id { get; set; }
        public string Question { get; set; }
        public string OptionOne { get; set; }
        public string OptionTwo { get; set; }
        public string OptionThree { get; set; }
        public string OptionFour { get; set; }
    }
    

    2.View(注意你设置了optionOne的错误值@item.OptionTwo):

    @model IEnumerable<QuestionAndAnswers>
    
    @{
        int count = 0;
        int i = 0;
    }
    <form method="post">
        @foreach (var item in Model)
        {
            count = count + 1;
            <table class="table" style="background-color:lavender">
                <tbody>
                    <tr class="border-light"><td>Question @count :   @item.Question</td></tr>              
                    <tr class="bg-light"><td>Options : </td></tr>
                    <tr class="border-light"><td><input asp-for="@item.OptionOne" type="radio" name="counter[@i]" value="@item.OptionOne" /> a) @item.OptionOne</td></tr>
                    <tr class="bg-light"><td><input asp-for="@item.OptionTwo" type="radio" name="counter[@i]" value="@item.OptionTwo" /> b) @item.OptionTwo</td></tr>
                    <tr class="border-light"><td><input asp-for="@item.OptionThree" type="radio" name="counter[@i]" value="@item.OptionThree" /> c) @item.OptionThree</td></tr>
                    <tr class="bg-light"><td><input asp-for="@item.OptionFour" type="radio" name="counter[@i]" value="@item.OptionFour" /> d) @item.OptionFour</td></tr>
                </tbody>
            </table>
            i++;
            <br />
    
        }
        <div class="form-group">
            <input type="submit" value="Submit" class="btn btn-primary" />
        </div>
    </form>
    

    3.控制器:

    public class QuestionAndAnswersController : Controller
    {
        private readonly YourContext _context;
        public QuestionAndAnswersController(YourContext context)
        {
            _context = context;
        }
        // GET: QuestionAndAnswers
        public async Task<IActionResult> Index()
        {
            return View(await _context.QuestionAndAnswers.ToListAsync());
        }
        [HttpPost]
        public async Task<IActionResult> Index(string[] counter)
        {
            foreach(var item in counter)
            {
                var data = new CandidateExam()
                {
                    OptionSelected = item
                };
                _context.Add(data);
                await _context.SaveChangesAsync();
            }
            //do your stuff...
        }
    

    4.结果:

    【讨论】:

      【解决方案3】:

      您不能将 foreach 项目与回发的项目绑定,因为它会混淆 MVC 依赖于回发数据的命名约定。为此,您将不得不使用 For 循环。

          @for(int i=0; i< Model.Count(); i++)
      {
      for (int j=0; i< data.Count(); j++)
      {
        // here you can do like this to bind your element 
      @Html.RadioButtonFor(x=> data[j].propertyName)
      
         }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-22
        • 2021-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多