2014-11-24

ASP.NET MVC - 如何讓Form參數內的XML字串綁定到Model

最近在學習MVC,目前有個需求,需要使用者將Form Post到某個Action內,裡面的參數還會有xml文字,整個參數會像底下一樣:
  1. A=123&B=abc&C=<Root><A>123</A><B>abc</B><C>kkk</C><D>iii</D></Root>

其中A與B是普通字串,而C是XML字串

在Visual Studio 2013裡有個好用的功能,可以將XML或JSON字串轉成Class,只要使用選擇性貼上即可。底下就是寫好的一個使用者參數的Model:
  1. public class SendModel
  2. {
  3. [Required(AllowEmptyStrings = false, ErrorMessage = "{0}不可為空")]
  4. [StringLength(3, MinimumLength = 3, ErrorMessage = "{0}長度必須為{2}")]
  5. public string A { get; set; }
  6. [Required(AllowEmptyStrings = false, ErrorMessage = "{0}不可為空")]
  7. [StringLength(3, MinimumLength = 3, ErrorMessage = "{0}長度必須為{2}")]
  8. public string B { get; set; }
  9. [Required(AllowEmptyStrings = false, ErrorMessage="xml不可為空,請檢查格式是否正確")]
  10. public SendXmlModel C { get; set; }
  11. //這個類別就是將XML貼上之後所產生的,格式相同就可序列化成字串或反序列化回該類別的物件
  12. [Serializable]
  13. [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
  14. [System.Xml.Serialization.XmlRootAttribute("Root", Namespace = "", IsNullable = false)]
  15. public partial class SendXmlModel {
  16. public string A { get; set; }
  17. public string B { get; set; }
  18. public string C { get; set; }
  19. public string D { get; set; }
  20. }
  21. }