【问题标题】:How I can add data in database using XML parsing asp.net mvc 5?如何使用 XML 解析 asp.net mvc 5 在数据库中添加数据?
【发布时间】:2017-05-31 07:17:15
【问题描述】:

我正在做一个项目,我必须使用 XML 解析向数据库添加数据。数据在详细信息中从视图传到控制器。如何保存?

我不知道该怎么做。这就是我试图实现它的方式:

控制器

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

});

【问题讨论】:

    标签: c# jquery xml asp.net-mvc


    【解决方案1】:

    您需要将您的 XML 字符串发布到控制器操作中,以允许您连接到您的数据库服务,以便您可以保存它。我会使用如下例所示的 AJAX 帖子:

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

    看看您正在尝试什么,我会尽快处理 JQuery 之外的 XML 操作。我希望在您的应用程序中使用某种形式的 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 应用程序,我将有一个类似于以下示例的 ViewModel:

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

    我希望这是有道理的,并有所帮助....而且我已经理解您的需求:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多