You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:将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");
    }
}

注意事项

  1. 确保Question类的属性名称和QuestionData的对应一致,如果Question里的属性名不同(比如Option1而非Option_1),要调整赋值语句里的对应字段。
  2. 如果后续有大量类似的对象映射需求,可以考虑使用AutoMapper库来简化代码,但当前场景下手动映射已经足够轻量高效。
  3. 别忘了给CompletePollSurvey的PollSurveyID和Name属性赋值,这样视图才能拿到完整的模型数据。

内容的提问来源于stack exchange,提问作者akshay sahu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:33:54