我有这个xml文件
<?xml version="1.0" encoding="utf-8"?>
<CRM>
<Unit ID="1" Name="آذربایجان شرقی">
<city ID="1">آذرشهر </city>
<city ID="2">اسکو </city>
<city ID="3">اهر </city>
<city ID="12">کلیبر </city>
<city ID="13">مراغه </city>
<city ID="14">مرند </city>
<city ID="15">ملکان </city>
<city ID="16">ملکان </city>
<city ID="17">میانه </city>
<city ID="18">ورزقان </city>
<city ID="19">هریس </city>
<city ID="20">هشترود</city>
</Unit>
<Unit ID="2" Name="آذربایجان غربی">
<city ID="1">ارومیه </city>
<city ID="2">اشنویه </city>
<city ID="3">بوکان </city>
<city ID="4">پیرانشهر </city>
<city ID="5">تکاب </city>
<city ID="6">چالدران </city>
</Unit>
<Unit ID="3" Name="اردبیل">
<city ID="1">اردبیل </city>
<city ID="2">بیلهسوار </city>
</Unit>
<Unit ID="4" Name="اصفهان">
<city ID="1">آران و بیدگل</city>
<city ID="2">اردستان </city>
<city ID="3">اصفهان </city>
<city ID="4">برخوار و میمه</city>
<city ID="5">تیران و کرون</city>
<city ID="6">چادگان </city>
<city ID="7">خمینیشهر </city>
<city ID="8">خوانسار </city>
<city ID="9">سمیرم </city>
<city ID="10">شهرضا"</city>
<city ID="11">سمیرم سفلی"</city>
<city ID="12">فریدن"</city>
</Unit>
</CRM>
我在html.dropdownlist
我使用此代码:
List<SelectList> u = new List<SelectList>();
var locations = XDocument.Load(strXmlpath);
var query = from l in locations.Descendants("CRM") select l;
foreach (var q in query)
{
u.Add(new SelectList(new[] {
new {ID = q.Attributes("ID").FirstOrDefault(),
Name = q.Attributes("Name").FirstOrDefault()
}
},
"ID", "Name", 1));
}
ViewData["xml"] = new SelectList(u,"ID","Name");
这是在视图中:
<%=Html.DropDownList("xml",(SelectList) ViewData["xml"] )%>
但导致此错误:
DataBinding:'System.Web.Mvc.SelectList'不包含名称为'ID'的属性。
答案 0 :(得分:4)
我会使用视图模型:
public class UnitViewModel
{
public string SelectedID { get; set; }
public IEnumerable<SelectListItem> Units { get; set; }
}
我将在解析XML文件后填充我的控制器操作:
public ActionResult Index()
{
// TODO: it would be better to externalize the parsing of the XML
// file into a separate repository class to avoid cluttering your
// controller actions with such code which is not what they should
// be responsible for. But for the purpose of this answer it should
// be enough
var file = Path.Combine(Server.MapPath("~/app_data"), "crm.xml");
var model = new UnitViewModel
{
Units =
from unit in XDocument.Load(file).Document.Descendants("Unit")
select new SelectListItem
{
Value = unit.Attribute("ID").Value,
Text = unit.Attribute("Name").Value
}
};
return View(model);
}
最后在我的强类型视图中,我将基于此视图模型生成下拉列表:
<%= Html.DropDownListFor(
x => x.SelectedID,
new SelectList(Model.Units, "Value", "Text")
) %>
答案 1 :(得分:0)
所以我使用这个主题和其他一些来找出我所在国家/地区下拉列表所需的修复程序。我认为它可能在将来帮助人们。
这有点像魅力可能不是最干净的解决方案,但嘿它的工作
var file = Path.Combine(Server.MapPath("~/Content/xml"), "countries.xml");
XmlDocument doc = new XmlDocument();
doc.Load(file);
XmlNodeList countryList = doc.GetElementsByTagName("Country");
List<SelectListItem> countries = new List<SelectListItem>();
foreach (XmlNode country in countryList)
{
string name = country.ChildNodes[0].InnerText;
string code = country.ChildNodes[1].InnerText;
countries.Add(new SelectListItem
{
Text = name,
Value = code
});
}
ViewBag.country = new SelectList(countries, "Value", "Text");
return View();