Générer fichier xml à l'aide des données ASP.NET MVC forme

J'ai eu une forme plus tôt, qui a pris d'entrée sur la Relation de titre et FirstName, LastName de 2 personnes. Une fois entré dans l'info et clique sur envoyer, un xml obtenu généré qui ressemblait à:

<?xml version="1.0" encoding="utf-16"?>
<Data>
  <RelationData>
    <Relation Title="Friends">
      <Persons>
        <Person FirstName="Tom" LastName="B" />
        <Person FirstName="Jerry" LastName="C" />
      </Persons>
    </Relation>
  </RelationData>
</Data>

Modèles - FormModel.cs

public class Relation
{
    public string Title { get; set; }
    public string Person1FirstName { get; set; }
    public string Person1LastName { get; set; }
    public string Person2FirstName { get; set; }
    public string Person2LastName { get; set; }
}

XmlModel.cs

public class XmlModel
{
    [XmlRoot("Data")]
    public class Data
    {
        [XmlElement("RelationData")]
        public RelationData RelationData { get; set; }
    }

    [SerializableAttribute()]
    public class RelationData
    {
        [XmlElement("Relation")]
        public Relation Relation { get; set; }
    }

[SerializableAttribute()]
    public class Relation
    {
        [XmlElementAttribute()]
        public Persons Persons { get; set; }

        [XmlAttributeAttribute()]
        public string Title { get; set; }
    }

[SerializableAttribute()]
    public class Persons
    {
        [XmlElementAttribute("Person")]
        public Person[] Person { get; set; }
    }

[SerializableAttribute()]
    public class Person
    {
        [XmlAttributeAttribute()]
        public string FirstName { get; set; }

        [XmlAttributeAttribute()]
        public string LastName { get; set; }
    }
}

La Vue.cshtml est fortement typé, à la Relation de classe dans FormModel. Il contient des zones de texte et un bouton qui appelle la CreateData action dans le contrôleur.

<div class="form-horizontal">
    @Html.ValidationSummary(true)
    <div class="form-group">
        <input id="CreateData" type="submit" class="btn btn-primary" value="Create Data File" />
    </div>
</div>

Contrôleur.cs - Lit des données passées et crée la XmlModel objet est sérialisé à l'aide de la classe helper XmlResult.

[HttpPost]
public ActionResult CreateData(Relation rData)
{

    var xmlModelData = new XmlModel();

    //Create elements in XmlModel object using values in rData
    ...

    return new XmlResult<XmlModel>()
    {
        Data = xmlModelData
    };
}

De la classe Helper

public class XmlResult<T> : ActionResult
{
    public T Data { private get; set; }

    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.Clear();
        context.HttpContext.Response.ContentType = "text/xml";
        context.HttpContext.Response.ContentEncoding = Encoding.UTF8;

        var filename = DateTime.Now.ToString("mmddyyyyhhss") + ".xml";
        context.HttpContext.Response.AddHeader("content-disposition", "attachment; filename=" + filename);

        using(var writer = new StringWriter())
        {
            XmlSerializer xs = new XmlSerializer(typeof(T));
            xs.Serialize(writer, Data);
            context.HttpContext.Response.Write(writer);
        }
    }
}

Sorte ce qui lui donne une boîte de dialogue sur le navigateur de donner une option pour enregistrer le xml ou l'ouvrir.

Maintenant, nous voulons que le plus d'entrées sur le formulaire et sur la base de ces entrées d'autres plus complexes de données xml doit être généré dans le même fichier xml.

Le format xml est complexe, mais il aura de nouvelles données dans le précédent xml comme:

<?xml version="1.0" encoding="utf-16"?>
<Data>
  <RelationData>
    <Relation Title="Friends">
      <Persons>
        <Person FirstName="Tom" LastName="B" />
        <Person FirstName="Jerry" LastName="C" />
      </Persons>
    </Relation>
    <Relation Title="Friends">
      <Persons>
        <Person FirstName="Hello" LastName="AD" />
        <Person FirstName="World" LastName="BC" />
      </Persons>
    </Relation>
    ...
  </RelationData>
  <ComplexData>
   ...
  </ComplexData>
</Data>

Comme vous pouvez le voir, la forme peut fournir Relation multiples éléments ainsi que certains ComplexData. Je ne veux pas créer des classes pour cette ComplexData structure, donc j'ai probablement besoin d'écrire directement le xml à la place de la sérialisation des objets. Aussi attachant le point de vue à l'Égard du modèle n'a pas de sens aujourd'hui.

Alors, comment puis-je aller à ce sujet, de sorte que je suis encore capable de générer le fichier xml dans le navigateur? Dans la solution actuelle, il est en train de faire un serveur post, mais je suis prêt à la remplacer entièrement le travail sur le côté client. Vous ne savez pas si cela peut être fait à l'aide de jquery/javascript?

OriginalL'auteur AloofC | 2013-12-04