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
Vous devez vous connecter pour publier un commentaire.
Vous demander si vous pouvez créer le XML à 100% sur le côté client? Oui. Vous ne pouvez pas télécharger un fichier (pour des raisons de sécurité), mais vous pourriez le mettre dans une zone de texte.
Vous pouvez faire xml tout par la concaténation d'une chaîne de caractères sur le côté client.
Voici un post qui montre comment travailler avec XML avec différents javascript techniques sur le côté client uniquement:
Générer document XML en mémoire avec JavaScript
Jquery:
Comment analyser les données XML à l'aide de jQuery?
aaaand
voici quelques astuces pour permettre des téléchargements sur le côté client, dont certains nécessitent pas de code côté serveur:
À l'aide de HTML5/Javascript pour générer et enregistrer un fichier
OriginalL'auteur 0gyob0