[英]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.