[英]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.