使用Razor视图引擎在ASP.NET MVC3中创建下拉列表
我正在ASP.NET MVC3中使用Razor视图引擎创建用户注册表单。我面临着为国家创建下拉列表的问题。国家列表来自xml文件。使用Razor视图引擎在ASP.NET MVC3中创建下拉列表
我的项目层次结构如下
BusinessLayer - > USER_ACCOUNT - > Account_Registration.cs
这是我想创建一个用户注册模型类库。对于用户模型的代码如下
public class Account_Registration
{
public string User_Name { get; set; }
public string User_EmailID { get; set; }
public string User_Password { get; set; }
public string User_RePassword { get; set; }
public DateTime User_BirthDate { get; set; }
public enum_Gender User_Gender { get; set; }
public string User_Address { get; set; }
public string User_City { get; set; }
public string User_State { get; set; }
public IEnumerable<SelectListItem> User_Country { get; set; }
public string User_WebSite { get; set; }
public string User_Description { get; set; }
}
现在我想知道我应该把国家的XML文件,我怎么可以创建XML文件的下拉列表。 我的XML文件如下
<countries>
<country code="AF" iso="4">Afghanistan</country>
<country code="AL" iso="8">Albania</country>
<country code="DZ" iso="12">Algeria</country>
</countries>
正如我必须部署在IIS上这个项目,所以我想知道我应该把XML文件,这样就可以在Account_Registration模型,它是在类库项目和访问如何为人口国创建下拉列表。 谢谢
你可能不应该在每次渲染注册页面时阅读xml文件。由于硬盘操作成本高昂,这可能会是一个小瓶颈。我建议将它读入内存中(例如应用程序启动一次,并进入全局变量的某个位置,例如国家/地区)。
为了呈现您的列表,我建议您查看following文章。基本上,它是这样的:
Html.DropDownList(“countries”, new SelectList(model.Countries), “CountryId”, “CountryName”))
这是一个瓶颈,因为XML反序列化可能很昂贵。如果它在数据库中,则仍然需要从磁盘读取它。 :) – 2012-03-31 17:16:32
不是。数据库可以将经常访问的数据缓存在内存中,并且它们使用特殊技术更快地从磁盘中获取数据(更像是在磁盘上查找数据)。反序列化可能会很昂贵,可能不是:) – 2012-03-31 17:18:41
好的,但是,您也可以缓存XML反序列化的结果。这真的取决于OP之后的内容。如果OP想要通过文本文件更改配置,而不是构建基础架构以将数据库记录保存在表单中,那么XML文件可能是合适的。就个人而言,我只是手动将记录添加到数据库表中,并完成它。 – 2012-03-31 17:19:19
您可以为DropDown创建自己的扩展。
public static class GridExtensions
{
public static MvcHtmlString XmlDropDown(this HtmlHelper helper, string name, string value)
{
var document = XDocument.Parce(value);
var model = new List<SelectListItem>();
foreach(XElement element in document.Elements("countries/country"))
{
model.Add(new SelectListItem(){Text=element.Value, Value=element.Attribute("iso").Value})
}
return Html.DropDownList(name, model))
}
}
因此,在视图中可以使用
Html.XmlDropDown(“countries”, model.Countries)
你为什么不只是导入XML文件到你的数据库? – 2012-03-31 16:56:10
仅在表格或内容中导入xml – Awadhendra 2012-03-31 16:57:56
您是否拥有库?在存储库中编写一个反序列化XML文件并返回一个'List'的方法。更好的是,像@MystereMan建议的那样,把这些国家放在数据库中。 –
2012-03-31 16:58:25