Generieren der xml-Datei mit Daten in ASP.NET MVC-form

Hatte ich eine form früher nahm die Eingabe über das Verhältnis von Titel und Vorname, Nachname von 2 Personen. Nach der Eingabe der Informationen und die Schaltfläche zum Senden klickt, wird ein xml-bekam generiert, die sah aus wie:

<?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>

Modelle - 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; }
    }
}

Den Blick.cshtml ist stark typisiert, um die Beziehung Klasse FormModel. Es enthält die Textfelder und einen submit-button fordert der CreateData action im controller.

<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>

Controller.cs - Liest die übergebenen Daten aus und erstellt die XmlModel Objekt, das serialisiert wird mit Helfer-Klasse 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
    };
}

Helper-Klasse

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);
        }
    }
}

So gibt dies ein dialog über den browser geben Sie eine option zum speichern der xml-Code oder öffnen Sie es.

Nun wollen wir einige weitere Eingänge auf die form und basierend auf diesen Eingaben etwas komplexeren xml-Daten generiert werden, in der gleichen xml-Datei.

Xml-format ist Komplex, aber es werden neue Daten in den vorherigen xml wie:

<?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>

Wie Sie sehen können, kann das Formular bereitstellen mehrerer Relation Elemente sowie einige ComplexData. Ich don ' T wollen, erstellen Sie Klassen für diese ComplexData Struktur, so möchte ich wahrscheinlich einige Möglichkeit, direkt zu schreiben, die xml statt der Serialisierung der Objekte. Auch das binden der Ansicht Beziehung-Modell macht keinen Sinn jetzt.

Also, wie kann ich dies angehen, so dass ich bin immer noch in der Lage, zum generieren der xml-Datei im browser? In der aktuellen Lösung, es macht einen server zu senden, aber ich bin bereit, zu ändern, zu ganz funktioniert auf der client-Seite. Nicht sicher, ob dies mit jquery/javascript?

InformationsquelleAutor AloofC | 2013-12-04

Schreibe einen Kommentar