2010-04-15 3 views
1

2 년 동안의 웹폼 개발 후에 MVC로 전환하려고하는 것이 매우 좌절되었습니다.ASP.NET MVC 2의 DropDownList에 데이터 바인딩하기

다음은 해결할 수없는 극히 간단한 문제입니다. StateProvince라는 테이블에 상태 목록이 있습니다. DropDownList가 있습니다. DropDownList에 모든 상태를 표시하려고합니다.

간단하게 유지하십시오. MVC에 대해 아무것도 모릅니다.

다음은 내가 가지고있는 것입니다. 이 모든 것은 나에게 "System.Web.Mvc.SelectListItem"으로 채워진 DropDownList입니다.

작업 :

public ActionResult Create() 
    { 
     var dbTimecard = new TimecardDbDataContext(); 
     IEnumerable<SelectListItem> stateProvinces = dbTimecard.StateProvinces.Select(p => new SelectListItem 
     { 
      Value = p.StateProvinceId.ToString(), 
      Text = p.Name 
     }); 
     SelectList theList = new SelectList(stateProvinces); 
     ViewData["StateProvince"] = theList; 
     return View(); 
    } 

보기 :

<div class="editor-label"> 
       <%: Html.LabelFor(model => model.StateProvinceId) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.DropDownListFor(model => model.StateProvinceId, (SelectList)ViewData["StateProvince"])%> 
       <%: Html.ValidationMessageFor(model => model.StateProvinceId) %> 
      </div> 
+0

은 실제로 개체로 채워진 Model.StateProvinces이며 StateProvinceId에는 null이 아닌 값이 포함되어 있으며 모델은 = null입니까? – Michel

+0

조치를 표시 할 수 있습니까? –

+0

좋아, Create는 당신의 GET이라고 가정합니다 ... 게시물을 처리하고 결과를 반환하는 코드는 어디에 있습니까? 그것이 문제라고 생각하고 ViewData가 호출간에 유지되지 않지만 완전히 질문을 오해 할 수 있습니다. 초기로드시 또는 결과를 게시하고보기를 다시 작성하는 중 문제가 있습니까? – Kelsey

답변

0

일반적인 브라우저가 HTML 양식에서 PUT 동사를 지원하지 않습니다. 그래서 당신이 다시 가져 오는되지 않은 가정하고이를 다시 추가하고 데이터를 게시하면, DropDown에 나열된 항목 다시 모델에 게시되지 않습니다

$(function() { 
    // when some button is clicked: 
    $('#someButton').click(function() { 
     $.ajax({ 
      url: '/controller/action', 
      data: { selectedState: $('#StateProvinceId').val() }, 
      type: 'PUT', 
      success: function(data) { 
       alert('state successfully submitted'); 
      } 
     }); 
     return false; 
    }); 
}); 
+0

죄송합니다. 사실 POST입니다. –

0

:이 사용 아약스를 처리해야 할 수도 있습니다 모델을 다시보기로 되돌리기 전에 모델로 가져옵니다.

귀하의 게시물에 Model.StateProvinces을 채우고보기로 전달해야합니다. ViewStateDropDownList 항목을 유지하고 다시 작성하는 WebForms와 달리 값만 유지됩니다.

Best way of implementing DropDownList in ASP.NET MVC 2?

: 일부 사용이 될 수도 다시는 드롭 다운 목록을 처리하는 방법을 설명하는 데 도움이하는 동안 실제로 질문 a를 요청

// POST: /YourController/YourAction/{ID} 
[HttpPost] 
public ActionResult YourAction(YourModel model, int id) 
{ 
    // model.StateProvinceId has the selected value 

    // you need to fill StateProvinces since it is empty as the list is not posted 
    // back so it is not autofilled into your model. 
    model.StateProvinces = LoadYourStateProvincesList(); 

    // This would blow up if StateProvinces is null because your View is assuming that 
    // it has a valid list of StateProvinces in it to build the DropDown 
    return View(model); 
} 

:

그래서 컨트롤러를 가정하는 것은 뭔가처럼 보인다

편집 : 귀하의 의견에 따라 첫 번째 목록을 얻지도 못했지만 모델 설정이 올바로되어 있지 않은 것 같습니다. 당신도 모델이 있습니까? 작성한 모델 데이터가없는 View()이 반환됩니다. 모델을 만들어 반환해야합니다.

예 : 양식이 다시 게시 할 때 예를 번째 I는 POST 부분에 대한 위의 게시와 같은 MVC는 모델에 값을 물건 때문에이 값을 검색 할 수 있도록

public class YourModel 
{ 
    public int StateProvinceId { get; set; } 
    /// ... whatever else you need 
} 

// Then in your view your controller you need to set it and create it 
View(new YourModel() { StateProvinceId = 123 };); 

당신은 모델이 필요합니다.

편집 : 이제는 원래의 질문보다 훨씬 명확하고 명확한 질문입니다.당신이 가지고

SelectList theList = new SelectList(stateProvinces, "Value", "Text"); 

를 원래의 질문에 : 완전히 정확했다

<%: Html.DropDownListFor(model => model.StateProvinceId, new SelectList(Model.StateProvinces, "StateProvinceId", "Name"))%> 

하지만 당신이 어떻게 구축 된 한 Model.StateProvinces을 문제는 selectList의 요구가 어디에 넣어 어떤 필드 말할 것입니다 그건 틀렸어 그래서 뭔가 다른 생각이 들었다.

작업 : :

public ActionResult Create() 
    { 
     var dbTimecard = new TimecardDbDataContext(); 
     IEnumerable<SelectListItem> stateProvinces = dbTimecard.StateProvinces.Select(p => new SelectListItem 
     { 
      Value = p.StateProvinceId.ToString(), 
      Text = p.Name 
     }); 
     ViewData["StateProvince"] = stateProvinces; 
     return View(); 
    } 

보기 :

<div class="editor-field"> 
       <%: Html.DropDownListFor(model => model.StateProvinceId, (IEnumerable<SelectListItem>)ViewData["StateProvince"])%> 
       <%: Html.ValidationMessageFor(model => model.StateProvinceId) %> 
      </div> 
+0

다음과 같은 작업을 수행하려면 어떻게해야합니까? DropDownList가 StateProvince 테이블의 행 목록을 표시하도록합니다. DropDownList에 표시된 텍스트는 "Name"열이고 Value는 "StateProvinceId"열입니다. –

+0

내 말은, 아직 데이터를 POST하려고하는 것이 아닙니다. –

+0

POST에 모델 바인더를 사용하고 있습니다. –

1

내가 찾던입니다
SelectList theList = new SelectList(stateProvinces, "Value", "Text"); 
+1

뷰에 할당 된 모델이 없으므로'model => model.StaeProvinceId'가 어떻게 작동할까요? 내 대답에 대한 편집을 확인하십시오. – Kelsey

1

이이

SelectList theList = new SelectList(stateProvinces); 

를 교체 시도 ...

여기
관련 문제