求助:将Question列表元素赋值给CompletePollSurvey模型属性
我来帮你搞定这个列表赋值的问题!先理清楚现有代码,再一步步实现转换逻辑:
现有代码
模型(MODEL)
namespace CG.MyPollSurveyAdmin.Models { public class CompletePollSurvey { public long PollSurveyID { get; set; } public string Name { get; set; } public List<OptionData> Options { get; set; } public List<QuestionData> QuestionDetails { get; set; } } public class QuestionData { public string QuestionName { get; set; } public long QuestionID { get; set; } public int OptionID { get; set; } public string OptionType { get; set; } public string Option_1 { get; set; } public string Option_2 { get; set; } public string Option_3 { get; set; } public string Option_4 { get; set; } public string Option_5 { get; set; } } }
控制器(CONTROLLER)
private List<Question> GetQuestionsById(long PollSurveyId) { MemoryStream outMemoryStream = RESTFulServiceHelper.Instance.ExecuteGetMethod(Constants.Method_GetAllQuestions, Convert.ToString(Session[Constants.NTLoginID])); DataContractJsonSerializer outDataContractJsonSerialize = new DataContractJsonSerializer(typeof(List<Question>)); List<Question> lstQuestions = outDataContractJsonSerialize.ReadObject(outMemoryStream) as List<Question>; List<Question> question = lstQuestions.Where(p => p.PollSurveyID == PollSurveyId).ToList(); return question; } public ActionResult Help(long PollSurveyID=2) { if (Session[Constants.Session_IsAdmin] != null && Convert.ToBoolean(Session[Constants.Session_IsAdmin])) { CompletePollSurvey completePollSurvey = new CompletePollSurvey(); List<Question> question = GetQuestionsById(Convert.ToInt64(PollSurveyID)); return View(completePollSurvey); } else { return RedirectToAction("Login"); } }
问题核心
你已经成功获取了指定Poll的Question列表,但Question和QuestionData是两个不同的类,不能直接把列表赋值过去,需要手动(或通过工具)把每个Question对象的属性映射到QuestionData对象上,再组装成列表赋值给CompletePollSurvey.QuestionDetails。
解决方案
修改你的Help方法,添加属性映射逻辑即可,这里用LINQ的Select方法来实现最直接的转换:
public ActionResult Help(long PollSurveyID=2) { if (Session[Constants.Session_IsAdmin] != null && Convert.ToBoolean(Session[Constants.Session_IsAdmin])) { CompletePollSurvey completePollSurvey = new CompletePollSurvey(); List<Question> questionList = GetQuestionsById(Convert.ToInt64(PollSurveyID)); // 核心逻辑:将Question列表转换为QuestionData列表 completePollSurvey.QuestionDetails = questionList.Select(q => new QuestionData { QuestionID = q.QuestionID, QuestionName = q.QuestionName, OptionID = q.OptionID, OptionType = q.OptionType, Option_1 = q.Option_1, Option_2 = q.Option_2, Option_3 = q.Option_3, Option_4 = q.Option_4, Option_5 = q.Option_5 }).ToList(); // 补充赋值CompletePollSurvey的其他必填属性 completePollSurvey.PollSurveyID = PollSurveyID; // 如果需要设置Poll名称,可以在这里添加逻辑,比如从接口或数据库获取 // completePollSurvey.Name = "你的Poll名称"; return View(completePollSurvey); } else { return RedirectToAction("Login"); } }
注意事项
- 确保
Question类的属性名称和QuestionData的对应一致,如果Question里的属性名不同(比如Option1而非Option_1),要调整赋值语句里的对应字段。 - 如果后续有大量类似的对象映射需求,可以考虑使用AutoMapper库来简化代码,但当前场景下手动映射已经足够轻量高效。
- 别忘了给
CompletePollSurvey的PollSurveyID和Name属性赋值,这样视图才能拿到完整的模型数据。
内容的提问来源于stack exchange,提问作者akshay sahu
相关产品推荐
相关产品推荐

