2012-03-31 59 views
0

我正在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模型,它是在类库项目和访问如何为人口国创建下拉列表。 谢谢

+0

你为什么不只是导入XML文件到你的数据库? – 2012-03-31 16:56:10

+0

仅在表格或内容中导入xml – Awadhendra 2012-03-31 16:57:56

+0

您是否拥有库?在存储库中编写一个反序列化XML文件并返回一个'List '的方法。更好的是,像@MystereMan建议的那样,把这些国家放在数据库中。 – 2012-03-31 16:58:25

回答

1

你可能不应该在每次渲染注册页面时阅读xml文件。由于硬盘操作成本高昂,这可能会是一个小瓶颈。我建议将它读入内存中(例如应用程序启动一次,并进入全局变量的某个位置,例如国家/地区)。

为了呈现您的列表,我建议您查看following文章。基本上,它是这样的:

Html.DropDownList(“countries”, new SelectList(model.Countries), “CountryId”, “CountryName”)) 
+0

这是一个瓶颈,因为XML反序列化可能很昂贵。如果它在数据库中,则仍然需要从磁盘读取它。 :) – 2012-03-31 17:16:32

+0

不是。数据库可以将经常访问的数据缓存在内存中,并且它们使用特殊技术更快地从磁盘中获取数据(更像是在磁盘上查找数据)。反序列化可能会很昂贵,可能不是:) – 2012-03-31 17:18:41

+0

好的,但是,您也可以缓存XML反序列化的结果。这真的取决于OP之后的内容。如果OP想要通过文本文件更改配置,而不是构建基础架构以将数据库记录保存在表单中,那么XML文件可能是合适的。就个人而言,我只是手动将记录添加到数据库表中,并完成它。 – 2012-03-31 17:19:19

0

您可以为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) 
相关问题