繁体   English   中英

使用MVC 4中的循环动态添加XElement?

[英]Add XElement dynamically using loop in MVC 4?

我想在Xdocument中添加Xelement,但如何使用循环动态添加? 我需要捕获用户的多个答案并动态生成Xelement。 请指导我或提供任何提示。 非常感谢!

    [HttpPost]
        public ActionResult SURV_Answer_Submit(List<AnswerQuestionViewModel> viewmodel, int Survey_ID, string Language)
        {
            if (ModelState.IsValid)
            {
                  var query = from r in db.SURV_Question_Ext_Model.ToList()
                        join s in db.SURV_Question_Model
                        on r.Qext_Question_ID equals
                        s.Question_ID
                        where  s.Question_Survey_ID == Survey_ID && r.Qext_Language == Language
                        orderby s.Question_Position ascending
                        select new { r, s };

                int i = 0;

                foreach(var item in query)
                {

                        var answer = new SURV_Answer_Model();
                        answer.Answer_Qext_ID = item.r.Qext_Question_ID;
                        string value = item.s.Question_Type;

                        string str = item.r.Qext_Configuration;

                        XElement qconfig;
                        qconfig = XElement.Parse(str);

                        XElement ChoicesType =
                        (from node in qconfig.Elements("ChoicesType")
                         select node).SingleOrDefault();

                         XDocument doc = new XDocument
                         (
                            new XDeclaration("1.0", "utf-8", "yes"),
                            new XComment("Question Configuration"),
                            new XElement("AnswerData",
                             new XElement("Answer1", viewmodel[i++].Answer),                    
                            new XElement("Answer2", viewmodel[i++].Answer), 
                            new XElement("Answer3", viewmodel[i++].Answer),
                            new XElement("Answer4", viewmodel[i++].Answer),
                            How to add dynamically for new XElement Answer2,3,4 here?


    );
                 answer.Answer_Data = doc.ToString();



                        db.SURV_Answer_Model.Add(answer);
                        db.SaveChanges();               
                }

                return RedirectToAction("SURV_Main_Index", "SURV_Main");

            }

            return View(viewmodel);
        }

尝试这样的事情:

XDocument doc = new XDocument
                 (
                       new XDeclaration("1.0", "utf-8", "yes"),
                           new XComment("Question Configuration"),
                           new XElement("AnswerData", GetAnswerData(viewmodel));

...

public List<XElement> GetAnswerData(Object viewmodel)
    {
        var result = new List<XElement>();

        for(int x =0 ; x < viewmodel[i].MultiAnswer.Count(); x++)
        {
            result.Add(new XElement("Answer",viewmodel[i++].MultiAnswer[x])));
        }
        return result;
    }

这是完整的代码

[HttpPost]
public ActionResult SURV_Answer_Submit(List<AnswerQuestionViewModel> viewmodel, int Survey_ID, string Language)
{
    if (ModelState.IsValid)
    {
          var query = from r in db.SURV_Question_Ext_Model.ToList()
                join s in db.SURV_Question_Model
                on r.Qext_Question_ID equals
                s.Question_ID
                where  s.Question_Survey_ID == Survey_ID && r.Qext_Language == Language
                orderby s.Question_Position ascending
                select new { r, s };

        int i = 0;

        foreach(var item in query)
        {

                var answer = new SURV_Answer_Model();
                answer.Answer_Qext_ID = item.r.Qext_Question_ID;
                string value = item.s.Question_Type;

                string str = item.r.Qext_Configuration;

                XElement qconfig;
                qconfig = XElement.Parse(str);

                XElement ChoicesType =
                (from node in qconfig.Elements("ChoicesType")
                 select node).SingleOrDefault();

                 XDocument doc = new XDocument
                 (
                    new XDeclaration("1.0", "utf-8", "yes"),
                    new XComment("Question Configuration"),
                    new XElement("AnswerData", GetAnswerData(viewmodel, i));

                answer.Answer_Data = doc.ToString();

                db.SURV_Answer_Model.Add(answer);
                db.SaveChanges();   
                i++;
        }

        return RedirectToAction("SURV_Main_Index", "SURV_Main");

    }

    return View(viewmodel);
}

public IEnumerable<XElement> GetAnswerData(List<AnswerQuestionViewModel> viewmodel, int i)
{
    for(int x =0 ; x < viewmodel[i].MultiAnswer.Count(); x++)
    {
        yield return new XElement("Answer",viewmodel[i++].MultiAnswer[x]));
    }
}

奥斯卡·丰塞卡Oscar Fonseca)给出的答案的更佳版本:

 XDocument doc = new XDocument
 (
       new XDeclaration("1.0", "utf-8", "yes"),
           new XComment("Question Configuration"),
           new XElement("AnswerData", GetAnswerData(viewmodel));
    //...

public IEnumerable<XElement> GetAnswerData(Object viewmodel)
{
    for(int x =0 ; x < viewmodel[i].MultiAnswer.Count(); x++)
    {
        yield return new XElement("Answer",viewmodel[i++].MultiAnswer[x]));
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM