簡體   English   中英

在viewmodel上生成一個列表

[英]Generate a List on viewmodel

我想生成列表並綁定到viewmodel中,但是在下面出現錯誤,我是否定義了錯誤的屬性?

傳遞到字典中的模型項的類型為“ SurveyTool.Models.AnswerQuestionViewModel”,但是此字典需要模型項的類型為“ System.Collections.Generic.IEnumerable`1 [SurveyTool.Models.AnswerQuestionViewModel]”。

Edit.cshtml:

@model IEnumerable<SurveyTool.Models.AnswerQuestionViewModel>

@{
    ViewBag.Title = "Edit";
}

<h2>Edit</h2>

<table>


@foreach (var item in Model) {
    <tr>

        <td>
            @Html.DisplayFor(modelItem => item.Question)
        </td>
        <td>
            @Html.EditorFor(modelItem => item.Answer)
        </td>
    </tr>
}

</table>

SURV_AnswerController:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SurveyTool.Models;

namespace SurveyTool.Controllers
{
    public class SURV_AnswerController : Controller
    {
        private SurveyToolDB db = new SurveyToolDB();
        //
        // GET: /SURV_Answer/

        public ActionResult Edit(int Survey_ID)
        {
            AnswerQuestionViewModel viewmodel = new AnswerQuestionViewModel();

            var query = from r in db.SURV_Question_Ext_Model
                        join s in db.SURV_Question_Model
                        on r.Qext_Question_ID equals
                        s.Question_ID
                        where s.Question_Survey_ID == Survey_ID
                        orderby s.Question_Position ascending
                        select r;

            foreach(var item in query)
            {

                viewmodel.Question = item.Qext_Text;
            }

            return View(viewmodel);
        }

    }
}

AnswerQuestionViewModel:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;


namespace SurveyTool.Models
{
    public class AnswerQuestionViewModel
    {
        public string Answer { get; set; }
        public string Question { get; set; }
    }
}

您只返回單個AnswerQuestionViewModel項目,而不返回集合。 在您的public ActionResult Edit(int Survey_ID)方法中,更改

AnswerQuestionViewModel viewmodel = new AnswerQuestionViewModel();

List<AnswerQuestionViewModel> viewmodel = new List<AnswerQuestionViewModel>();

然后在foreach循環中

foreach(var item in query)
{
    viewmodel.Add(new AnswerQuestionViewModel() { Question = item.Qext_Text });
}
return View(viewmodel);

編輯

請注意,您的視圖也存在問題。 使用foreach循環會生成重復的name屬性,因此該集合將不會在回發時綁定。 由於id屬性重復,它還會生成無效的html。 您需要使用一個for定制的循環EditorTemplate為typeof運算AnswerQuestionViewModel 使用for循環,它需要

@model List<SurveyTool.Models.AnswerQuestionViewModel>
@using (Html.BeginForm())
{
    for(int i = 0; i < Model.Count; i++)
    {
        @Html.DisplayFor(m => m[i].Question)
        @Html.EditorFor(m => m[i].Answer)
    }
    <input type="submit" />
}

但是,這只會回發模型的Answer屬性。 您沒有任何用於標識問題ID的屬性,因此您可能需要該ID的其他屬性,並在視圖中包含該屬性的隱藏輸入

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM