2012-03-31 2 views
0

면도기 뷰 엔진을 사용하여 ASP.NET MVC3에서 사용자 등록 양식을 만듭니다. 나는 국가를위한 드롭 다운리스트를 만드는 문제에 직면하고있다. 국가 목록은 xml 파일에서옵니다.면도기 뷰 엔진을 사용하여 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 파일의 드롭 다운리스트를 만들 수있는 곳. 내가 클래스 라이브러리 프로젝트에 Account_Registration 모델에 액세스 할 수 있도록 그래서 내가 XML 파일을 넣어해야하는 위치 알고 싶어 IIS에이 프로젝트를 배포해야으로

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

을 다음과 같이 내 XML 파일입니다 인구 국가의 드롭 다운리스트를 만드는 방법. 감사합니다.

+0

왜 당신은 당신의 데이터베이스에 XML 파일을 가져올 수 없습니다 사용할 수 있습니까? –

+0

표 또는 내용으로 XML 가져 오기 – Awadhendra

+0

저장소가 있습니까? XML 파일을 deserialize하고'List '을 반환하는 메소드를 저장소에 작성하십시오. @MystereMan이 제안한 것처럼, 더 나은 것은 데이터베이스에 국가를 넣는 것입니다. –

답변

1

등록 페이지를 렌더링 할 때마다 xml 파일을 읽지 않아야합니다. 하드 드라이브 작업에 많은 비용이 소요되므로 병목 현상이 발생할 수 있습니다. 응용 프로그램을 시작할 때와 같이 전역 변수 (예 : 국가)에 메모리를 읽는 것이 좋습니다.

목록을 렌더링하는 경우 following 문서를 살펴 보시기 바랍니다. 기본적으로 다음과 같이 바뀝니다.

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

XML 직렬화가 비쌀 수 있으므로 병목 현상이 발생합니다. 그것이 데이터베이스에 있다면, 여전히 디스크에서 읽을 필요가 있습니다. :) –

+0

사실. 데이터베이스는 자주 액세스되는 데이터를 하나의 메모리에 캐시 할 수 있으며 디스크에서 데이터를 가져 오는 것과 같은 특수 기술을 사용하여 디스크에서 데이터를 찾는 것이 더 빠릅니다. 역 직렬화는 비용이 많이 들며 그렇지 않을 수도 있습니다. –

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

그래서보기에 당신은

Html.XmlDropDown(“countries”, model.Countries) 
관련 문제