2017-05-31 112 views
0

我正在處理一個項目,我必須使用XML解析將數據添加到數據庫。數據來自視圖到詳細信息中的控制器。我怎樣才能保存它?如何使用XML解析asp.net mvc 5來在數據庫中添加數據?

我不知道該怎麼做。這就是我想實現它:

控制器

[HttpPost] 
[ValidateInput(false)] 
public ActionResult Add(SaleInvoice obj, string details) 
{ 
    var objsi = new SaleInvoice().Add(obj); 

    return View(); 
} 

查看jQuery函數

$("#btnsave").click(function() { 
     var xmlstring = "<?xml version=\"1.0\"?>"; 
     xmlstring += "<Sale_Invoice>" 
     var index = 0; 
     $("#tbldetail tbody").find("tr").each(function (i, ef) { 

      xmlstring += "<Detail>"; 
      xmlstring += "<Product>" + $(ef).children().get(0).innerText + "</Product>" 
      xmlstring += "<Quantity>" + $(ef).children().get(3).innerText + "</Quantity>" 



      index = index + 1; 


     }); 

     $('#frmAdd').prepend("<input type='hidden' name='details' value='" + xmlstring +"' />"); 

    $('#frmAdd').submit(); 
}); 

});

回答

1

您需要將您的XML字符串發佈到控制器操作以允許您掛接到數據庫服務,以便您可以保存它。我使用AJAX後像顯示在下面的例子:

  $.ajax({ 
       type: "POST", 
       url: "@Url.Action("YourSaveAction", "YourController")", 
       data: { xmlString: myXMLVar} 
      }); 

你正在嘗試什麼看,我會更快處理XML操作的jQuery之外。我希望在應用程序中使用某種形式的XML序列化來表示銷售和發票的模型。然後,您可以操作強類型對象,而不是通過JQuery提取屬性。

下面是一個如何做到這一點的例子。

首先創建一個標記爲可序列化的類來存儲您的訂單詳細信息。

[XmlRoot] 
    [Serializable] 
    public class SalesInvoice 
    { 
     [XmlElement] 
     public List<Detail> Details { get; set; } 

     public SalesInvoice() 
     { 
      Details = new List<Detail>(); 
     } 
    } 

    [Serializable] 
    public class Detail 
    { 
     [XmlElement] 
     public string Product { get; set; } 

     [XmlElement] 
     public string Quantity { get; set; } 
    } 

假設您有原始的XML地方,您可以將您的XML序列化到Sales類中。對於這個例子,我從文件本地讀取XML,但是你可以插入你的源代碼。

  var configStream = File.OpenRead(@"C:\invoice.xml"); 
      var reader = new StreamReader(configStream); 
      var xmlString = reader.ReadToEnd(); 
      var stringReader = new StringReader(xmlString); 
      var newInvoice = (SalesInvoice)serializer.Deserialize(stringReader); 

這會給你一個強類型的對象,你現在可以使用它來將數據寫入數據庫。

對於你的MVC應用程序,我將有一個視圖模型像下面的例子:

public class SalesModel 
{ 
    public SalesInvoice Invoice { get; set; } 
} 

這是可以在你的視圖進行操作,最後發佈到控制器將數據保存到數據庫中。

你的控制器可能是這個樣子:

 [HttpPost] 
     public void SaveSalesInvoice(SalesModel model) 
     { 
      var myDataService = new DataService(); 
      myDataService.SaveSalesInvoice(model.Invoice); 

     } 

我相信你會有某種服務在上面的例子中,是以SalesInvoice對象作爲參數讓您的數據保存到數據庫中。

再次重新閱讀,看起來您可能想要將整個XML保存到數據庫中。如果是這種情況,那麼您可以反序列化創建的對象以獲取XML字符串並保存該字符串。

var serializer = new XmlSerializer(typeof(SalesInvoice)); 
var writer = new StringWriter(); 
serializer.Serialize(writer, invoice); 
var xml = writer.ToString(); 

嗯,我希望這是有道理的,並幫助....而且我明白你的需要:)