2013-06-28 2 views
1

동적으로 뷰에 목록을 채우려 고합니다. 내 말은 사용자가 일부 "항목"(이 항목은 객체이기도 함)을 선택하고 선택하면 새 객체 목록을 채워야한다는 뜻입니다. 문제는 내가 @Html.TextBoxFor()를 공백리스트와 바인드하려고 할 때 나중에 선택된 값을 저장하기 위해서리스트에 객체가 아직 없다는 것입니다. 따라서 null 참조 예외가 생깁니다.빈 개체 목록을 바인딩하십시오.

문제를 설명하는 몇 가지 코드는 // -이 DDL은 사용자가 그들 //

@Html.DropDownListFor(m => m.ItemsToSelect, new SelectList(Model.ItemsToSelect.Select(s => new { s.id, s.descripcion}).ToList(), "id", "descripcion")) 

의 일부를 선택할 수 있도록 모든 "항목"을 제공하고이 코드와 빈리스트를 관련하려고 POSTBACK을 수행 할 때 단지 객체를 가질 콤보

@Html.TextBoxFor(m => m.selectedItems[0].id) 

이 마지막 텍스트 상자는 처음에는 null입니다. 실제로 작동하는 한 가지 해결책은이 목록에 빈 개체를 채우는 것입니다.하지만 해결할 다른 방법이 있어야한다고 생각합니다.

덕분에 누군가가 내가 풀려고하는 것을 이해하기를 바랍니다.

답변

0

페이지가 렌더링 될 때 존재하지 않는 항목에 텍스트 상자를 바인딩하려고하면이 문제가 발생합니다.

해결책은 간단합니다. 일반적인 HTML <input type='text' name='someProperty' /> 컨트롤을 만들고 모델에 맞는 name 속성을 지정하면됩니다. 양식을 게시 할 때 ASP.NET MVC가이 모델에 자동으로 추가합니다.

public class MyModel 
{ 
    string someProperty {get; set;} 
} 

당신은 예를 들어 같은 JQuery와의 비트를 사용하여 항목을 선택하면 텍스트 상자의 값을 채울 수 있습니다. $('#myDDL').change(function() { $('#myTextbox').val($('#myDDL').val()) });

은 또한 당신은 아마 하나 이상을 선택하면이를 구분 쉼표 아마 내가 생각 선택한 값을 보내드립니다 위의 name 방법을 사용하여 드롭 다운 목록 자체를 제출하고 있습니다.

+0

감사합니다 @SLC, 나는 이미 그런 식으로 내 문제를 해결했습니다, 나는 올바른 값으로 편집기를 채우기 위해 자바 스크립트를 사용하고 있습니다. 내 실수는 같은 목록을 사용하는 새로운 목록을 채우고 싶다는 것이 었습니다. 저는보기에 새로운 objetc를 만들 수 없으며 문제를 해결하는 방법을 바꾸어야한다고 생각합니다. 이제 동일한 항목 목록 만 사용자가 선택한 항목을 다시 게시합니다. –

0

selectedItems가 null이 아닌지 확인해보세요.

@if (Model.selectedItems != null && Model.selectedItems.Count() > 0) { 
    @Html.TextBoxFor(m => m.selectedItems[0].id) 
} 
+0

안녕하세요, 감사합니다. Darren하지만 문제는 "selectedItem"이 항목을 동적으로 채워야하며, 사용자가이 항목이 새 목록에 있어야하는 항목을 선택할 때 시작 부분에 빈 목록이 있어야한다는 것입니다. (나는 문제가보기에서 목록에 대한 새로운 객체를 만드는 방법이라고 생각합니다.) –

+0

선택한 항목이 NULL이고 이것이 문제를 해결할 때 문제가 해결된다고 생각하면 빈 텍스트 상자를 만드는 if 문에 else를 추가하면됩니다. 당신은 선택적으로 INLINE if 문을 그렇지 않으면 할 수 있습니다. – Steve

+0

제가 제대로 설명 할 수 없다고 생각합니다. 문제는 SelectedItem에 새 항목을 추가해야한다는 것입니다. 실제로 item과 selectedItems는 같은 객체 유형이 아니지만 도메인 단순화) 목록. 목록이 비어 있는지 확인하는 것은 내가 찾고있는 해결책이 아닙니다. –