繁体   English   中英

如何使用XML解析ASP.NET MVC 5在数据库中添加数据?

[英]How I can add data in database using XML parsing asp.net mvc 5?

我正在一个项目中,我必须使用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();
});

});

您需要将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; }
 }

这可以在您的View中进行操作,然后最终发布到控制器以将数据保存到数据库。

您的控制器可能看起来像这样:

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

好吧,我希望这是有道理的,对您有帮助。...而且我已经了解您的需求了:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM