2012-03-31 17 views
0

私は、剃刀ビューエンジンを使用してASP.NET MVC3でユーザー登録フォームを作成しています。私は国のためのドロップダウンリストを作成する問題に直面しています。国リストはXMLファイルから来ます。Razorビューエンジンを使用してASP.NET MVC3でドロップダウンリストを作成

マイプロジェクト階層は

を次のようにあるBusinessLayer - > USER_ACCOUNT - > Account_Registration.cs

これは私がユーザ登録のためのモデルを作成するクラスライブラリです。ユーザモデルのためのコードは、今私はどこ私は国のXMLファイルを置く必要があるとどのように私は、XMLファイルのドロップダウンリストを作成できることを知ってほしい

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ファイルが

<countries> 
     <country code="AF" iso="4">Afghanistan</country> 
     <country code="AL" iso="8">Albania</country> 
     <country code="DZ" iso="12">Algeria</country> 
</countries> 

私はIIS上でこのプロジェクトを展開する必要があるように、私は、私はクラスライブラリプロジェクトであるAccount_Registrationモデルでそれにアクセスできるように、私はxmlファイルを置くべき場所を知りたいが、以下のようで、人口の国のドロップダウンリストを作成する方法。 ありがとう

+0

を使用することができますか? –

+0

xmlを表またはコンテンツのみでインポート – Awadhendra

+0

リポジトリはありますか?リポジトリに、XMLファイルを逆シリアル化して 'List 'を返すメソッドを記述します。 @MystereManが示唆するように、データベースに国を追加する方がよいでしょう。 –

答えて

1

登録ページを表示するたびにxmlファイルを読むべきではないでしょう。ハードドライブの操作にはコストがかかりますので、それは小さなボトルネックになります。私はそれをメモリに読み込むことをお勧めします(アプリケーションの起動時など、グローバル変数、たとえばCountriesのどこか)。

リストを表示するには、followingの記事をご覧ください。基本的には次のようになります。

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

XMLの逆シリアル化が高価になる可能性があるため、ボトルネックです。それがデータベースにあれば、まだディスクから読み込む必要があります。 :) –

+0

本当に。データベースは、頻繁にアクセスされるデータを1つのメモリにキャッシュすることができ、ディスクからデータをフェッチするための特別な手法を使用します(ディスク上のデータを見つけることなど)。逆シリアル化は高価であり、そうでないかもしれません:) –

+0

まあ、はいですが、XMLの逆シリアル化の結果もキャッシュできます。それは実際にOPが何であるかに依存します。OPはむしろ形式でデータベースのレコードを維持するためのインフラストラクチャを構築するよりも、テキストファイル経由で設定を変更したい場合は、XMLファイルが適切かもしれません。個人的には、私はレコードを手動でデータベーステーブルに追加し、それを使って完了します。 –

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)) 
    } 
} 

、ビュー上であなたは自分のデータベースにXMLファイルをインポートしないのはなぜ

Html.XmlDropDown(“countries”, model.Countries) 
関連する問題