2011-09-06 7 views
0

에 목록 상자에서 선택한 모든 값 가져 오기이 같은 목록 상자 (listboxfor)를 가진 MVC3 프로젝트가 :MVC 3 - 게시

@Html.ListBoxFor(m => m.cat_fam_codes, new SelectList(BaanWrapper.GetAllCategoryFamilies(), "Code", "Description"), new { @size = "10" }) 

테스트, 나는 목록에서 여러 항목을 선택할 수 있어요 때 선택한 값이 쉼표로 제한된 목록을 팝업 할 때 이벤트 처리기를 추가했습니다. 그러나 폼을 컨트롤러에 다시 게시 할 때 반환 된 첫 번째 선택된 값만 가져옵니다. 예를 들어, 값 1,2,3,4를 선택하면 JQuery 이벤트 핸들러가 "1,2,3,4"로 팝업됩니다. 문제는 없지만 포스트 백에서는 컨트롤러에서 참조 된 바운드 객체가 "1"만 표시합니다.

[HttpPost] 
public ActionResult Create(EventReport eventReport) 
{ 
    return View(eventReport); 
} 

어떤 도움을 주시면 감사하겠습니다.

편집 :

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 

namespace EWS.Models 
{ 
    [MetadataType(typeof(EventReportMetaData))] 
    public partial class EventReport 
    { 
     private static readonly EWSDataContext db = new EWSDataContext(); 

     #region Nested type: MetaData 

     private sealed class EventReportMetaData 
     { 
      [DisplayName("Alert Email Body")] 
      [Required(ErrorMessage = "Required")] 
      public string alert_body { get; set; } 

      [DisplayName("Alert Email Subject")] 
      [Required(ErrorMessage = "Required")] 
      public string alert_subject { get; set; } 

      [DisplayName("Categories")] 
      public string cat_codes { get; set; } 

      [DisplayName("Category Families")] 
      public string cat_fam_codes { get; set; } 

      [DisplayName("CCR Codes")] 
      public string ccr_codes { get; set; } 

      [Required(ErrorMessage = "Required")] 
      public DateTime create_dtm { get; set; } 

      [Required(ErrorMessage = "Required")] 
      public int created_by { get; set; } 

      [DisplayName("Email List")] 
      [Required(ErrorMessage = "Required")] 
      [IsInteger(ErrorMessage = "Invalid Email List")] 
      [IsGreaterThanZero(ErrorMessage = "Required")] 
      public int email_list_id { get; set; } 

      [DisplayName("Begin Date")] 
      public DateTime begin_dtm { get; set; } 

      [DisplayName("End Date")] 
      public DateTime end_dtm { get; set; } 

      [DisplayName("Event Threshold")] 
      [Required(ErrorMessage = "Required")] 
      [IsInteger(ErrorMessage = "Invalid Threshold")] 
      public int event_count { get; set; } 

      [DisplayName("Disabled")] 
      public bool is_disabled { get; set; } 

      [DisplayName("Notify Over Threshold")] 
      [Required(ErrorMessage = "Required")] 
      public bool notify_over_events { get; set; } 

      [DisplayName("Notify Under Threshold")] 
      [Required(ErrorMessage = "Required")] 
      public bool notify_under_events { get; set; } 

      [Required(ErrorMessage = "Required")] 
      public int report_id { get; set; } 

      [DisplayName("Report Title")] 
      [Required(ErrorMessage = "Required")] 
      public string report_title { get; set; } 

      [DisplayName("Reset By")] 
      public int reset_by { get; set; } 

      [DisplayName("Reset Date")] 
      public DateTime reset_dtm { get; set; } 

      [DisplayName("SKUs")] 
      public string skus { get; set; } 

      [DisplayName("Source System")] 
      [Required(ErrorMessage = "Required")] 
      public string source_system { get; set; } 

      [DisplayName("Sub-Categories")] 
      public string sub_cat_codes { get; set; } 

      [DisplayName("# of Time Units")] 
      [Required(ErrorMessage = "Required")] 
      public int window_dt_part_count { get; set; } 

      [DisplayName("Unit of Time")] 
      [Required(ErrorMessage = "Required")] 
      public string window_dt_part { get; set; } 
     } 

     #endregion 
    } 
} 

감사 :

다음은 EventReport 데이터 모델/클래스입니다!

+0

eventReport 모델은 어떤 모습입니까? –

답변

1

속성 유형을 string [] 또는 int []로 변경하십시오. 나는 기본 모델 바인더가 배열을 필요로한다고 생각한다. 그리고 당신의 경우에는 배열이 아니기 때문에 처음 선택된 값으로 배열을 채웠다. 이 모델 클래스를 고수해야하는 경우 맞춤 설정 모델 바인더를 사용하여 바인딩을 조정해야 할 수 있습니다.

0

여기 야영 자들이 내가 한 일은 ... 내 데이터베이스 모델의 cat_code에 대한 드롭 다운 목록 하나를 예로 사용합니다.

지금처럼 내 모델 클래스를 수정 : 아래에 더

public IList<string> SelectedCategoryCodes 
{ 
    get 
    { 
     if (string.IsNullOrWhiteSpace(cat_codes)) 
      return new List<string>(); 

     return cat_codes.Split(',').ToList(); 
    } 
    set { cat_codes = string.Join(",", value.ToArray()); } 
} 

내가

나는 데이터베이스에 쉼표로 구분 된 문자열로 선택한 여러 값을 저장 이후
private sealed class EventReportMetaData 
{ 
    .... 
    [DisplayName("Categories")] 
    public string cat_codes { get; set; } 
    .... 
} 

했다, 나는이 추가 해당 필드 (cat_codes)에 저장된 데이터를 읽고 쓸 수 있도록 MVC 모델에 전달합니다.

@Html.ListBoxFor(m => m.SelectedCategoryCodes, new SelectList(BaanWrapper.GetAllCategories(), "Code", "Description"), new {@size = "10"}) 

을했다 :

그런 다음 내보기에 나는 다음과 같이 할 수있는 ListBoxFor 선언을 변경했습니다. 내 데이터베이스 모델에는 이미 cat_codes 필드가 있었기 때문에 모든 것이 제자리에 들어갔다.

희망이 있으면 도움이됩니다.