2016-06-14 3 views
-1

보기 ItemTypes.cs에서은 다시 게시 MVC

<input type="hidden" name="selectedValue" value="0" /> 
      <select name="itemType" id="itemType" style="width:80%;"> 
       <option value="Item1">Item 1</option> 
       <option value="Item2">Item 2</option> 
       <option value="Item3">Item 3</option> 
       <option value="Item4">Item 4</option> 
       <option value="Item5">Item 5</option> 
      </select> 

뷰 모델

public ItemTypes itemType { get; set; } 

열거 목록 (확장 메서드)

public enum ItemTypes 
{ 
    Item1, 
    Item2, 
    Item3, 
    Item4, 
    Item5 
} 


public static string GetItemDesc(this ItemTypes itemtype) 
    { 
     switch (itemtype) 
     { 
      case ItemTypes.Item1: 
       return "Item 1 Description"; 

      case ItemTypes.Item2: 
       return "Item 2 Description"; 

      case ItemTypes.Item3: 
       return "Item 3 Description"; 

      default: 
       return "Item 4 and 5 Description"; 
     } 
    } 

위 내 코드 후 열거 값을 유지합니다. 선택한 전체 열거 값을 페이지 전체에 유지하고 싶습니다. 4 가지 방법으로 드롭 다운 메뉴가있는 색인, 지불 방법을 선택하는 페이지, 확인 페이지 (입력 한 모든 정보를 확인하는 곳) 및 영수증 페이지 (거래가 성공했습니다.) 각 페이지에서 동일하게 유지하려면 enum 값이 필요합니다. 도와주세요.

+0

값을 Item1 = 0, Item2 = 1 등으로하고 드롭 다운의 값을이 값에 맞게 변경 한 다음 정수를 전달하십시오.열거 형 값을 다시 쉽게 구문 분석 할 수 있습니다. – InitLipton

+1

열거 형에 설명을 추가하는 더 좋은 방법은 설명 속성을 사용하는 것입니다. [Description ("Item 1 Description")]을 열거 형 값 위에두고 해당 특성을 읽는 확장 메서드를 사용합니다. 많은 예제가 온라인으로 제공됩니다. http://stackoverflow.com/questions/2650080/how-to-get-c-sharp-enum-description-from-value – InitLipton

+0

보기 모델은 드롭 다운 목록이 양식 내부에 있다고 가정하여 모델 바인딩을 통해이를 처리해야합니다 그것은되어야한다) – DGibbs

답변

0

몇 가지 옵션이 있지만 MVC는 상태가 저장되지 않는다는 점에 유의하십시오. 이것은 MVC가 열거 형 페이지 요청에 저장된 정보를 모른다는 것을 의미합니다. 따라서 enum을 문자열로받은 다음, 문자열을 다시 열거 형으로 구문 분석하는 매개 변수를 액션 메서드에 전달해야합니다. 이를 수행하는 방법의 예는 here입니다.

또는 복사 + 붙여 넣기 코드 :

using System; 

[Flags] enum Colors { None=0, Red = 1, Green = 2, Blue = 4 }; 

public class Example 
{ 
    public static void Main() 
    { 
     string[] colorStrings = { "0", "2", "8", "blue", "Blue", "Yellow", "Red, Green" }; 
     foreach (string colorString in colorStrings) 
     { 
     try { 
      Colors colorValue = (Colors) Enum.Parse(typeof(Colors), colorString);   
      if (Enum.IsDefined(typeof(Colors), colorValue) | colorValue.ToString().Contains(",")) 
       Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString()); 
      else 
       Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString); 
     } 
     catch (ArgumentException) { 
      Console.WriteLine("'{0}' is not a member of the Colors enumeration.", colorString); 
     } 
     } 
    } 
} 

모든 페이지 당신이 열거 뷰를 생성하는 액션 메소드에서 열거를 통과해야합니다으로 접수 할 사실도 있습니다. 그런 다음 뷰 자체에서 숨겨진 필드 안에 열거 형을 수락하고 저장해야합니다.

1

내가해야 할 일은 어딘가에 선택을 저장하는 것인데, 다른 페이지는 그 선택에 액세스 할 수 있습니다. MVC는 stateless이므로 각 호출에서 값을 전달해야하거나 다른 페이지에서 액세스 할 수있는 위치에 값을 저장해야합니다. 브라우저 컨트롤의 선택 항목을 저장하고 검색하려면 여러 가지 방법이 있습니다.

enum은 기본적으로 정수로 serialize되므로 클라이언트 측에서 값을 처리 할 때는 정수가됩니다. 이것이 의미하는 바는 클라이언트 측 값으로 0, 1, 2, 3 및 4를 사용하는 <option value="0">Item 1</option>을 사용해야하거나 MVC 버전에 따라 MVC HTML 도우미 또는 면도기 마크 업을 사용해야한다는 것입니다. 열거 형 이름을 사용하여 생성 된 옵션이 있습니다. 여기

사용자의 요구에 맞게 수있는 몇 가지 저장/검색하는 옵션입니다 각 페이지를 제출할 때

  • 는 게시 된 내용의 속성으로 선택 값을 전달합니다 (itemType)을, 다음은로드 할 때 다음 페이지에서 쿼리 문자열에 값을 포함 시키거나 다음 get 요청 (GetPaymentMethodPage, GetVerifyPage, GetReceiptPage)에 대한 경로의 일부로 값을 포함시킵니다.

  • 선택 값을 쿠키에 저장하고 JavaScript에서 해당 쿠키에서 검색합니다 (쿠키가 존재하지 않거나 삭제되거나 사용자가 쿠키를 허용하지 않는 경우 기본값을 제공해야합니다) .

  • 브라우저 저장 공간에 선택 값 저장 - Web Storage (SessionStorage 또는 LocalStorage)를 포함한 다양한 종류가 있습니다.