使用Razor视图引擎在ASP.NET MVC3中创建下拉列表

时间:2012-03-31 16:48:35

标签: asp.net-mvc asp.net-mvc-3 razor

我正在使用razor视图引擎在ASP.NET MVC3中创建用户注册表单。我正面临着为国家创建下拉列表的问题。国家/地区列表来自xml文件。

我的项目层次结构如下

BusinessLayer - > User_Account - > Account_Registration.cs

这是一个类库,我想在其中创建一个用于用户注册的Model。用户模型的代码如下

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模型中访问它,以及如何为人口国家创建下拉列表。 感谢

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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)