0
내보기는이 모델에 바인딩MVC 뷰 모델 부분적으로 널
public class HomepageViewModel
{
public HomepageViewModel()
{
Regions = new List<TMRegion>();
}
public List<TMRegion> Regions { get; set; }
public int SelectedRegion { get; set; }
public SelectList SelectListRegions
{
get
{
List<SelectListItem> items = new List<SelectListItem>();
foreach (var tmRegion in Regions)
{
items.Add(new SelectListItem()
{
Value = tmRegion.Value.ToString(),
Text = tmRegion.Display
});
}
return new SelectList(items);
}
}
}
내보기는 다음과 같이이다 -
// GET: Search
public async Task<ViewResult> Index(HomepageViewModel viewModel)
{
if (viewModel.Regions.Count == 0)
{
viewModel = new HomepageViewModel();
JavaScriptSerializer js = new JavaScriptSerializer();
viewModel.Regions =
js.Deserialize<TMRegion[]>(
await _ApiConsumer.ExecuteGetMethod("myurlinhere"))
.ToList();
}
return View(viewModel);
}
-
@model ProSell.Admin.Models.ViewModels.HomepageViewModel
@using (Html.BeginForm("Index", "Search", FormMethod.Post, new { viewModel = Model }))
{
@Html.HiddenFor(m=>m.Regions)
@Html.DropDownListFor(model => model.SelectedRegion, Model.SelectListRegions.Items as List<SelectListItem>, "Select a region")
<input type="submit"/>
}
내 컨트롤러가 같은 지역을 채 웁니다
드롭 드로우 뷰에 n이 채워집니다. 지역을 선택하고 HomepageViewModel을 제출하면 SelectedRegion이 선택된 ID로 올바르게 설정되지만 지역 컬렉션은 비어 있습니다.
제출시 모델의 목록을 어떻게 유지합니까?
'새 {뷰 모델 = 모델} 제거해보십시오 :
을하고보기에 :
또한이 같은 컬렉션 속성을 정리할 수 있습니다 양식 데이터가 컨트롤러에 제출됩니다. –
복합 객체 컬렉션을 ''에 바인딩 할 수 없습니다. 생성하는 html을 보면 이해할 수 있습니다! 필요하다면 콜렉션을 게시하지 말라. (단,'ModelState'가 유효하지 않고 뷰를 반환해야하는 경우 만 가능하다.) 다시 가져온다. 그리고 모델을'public IEnumerable SelectListRegions {get; 세트; }'- 컨트롤러가 모델을 생성하는 책임이 아니라 –
그리고'SelectList'를'List'으로 캐스팅 할 필요가 없습니다 - 단지 @Html.DropDownListFor (model =>) 일 필요가 있습니다. model.SelectedRegion, Model.SelectListRegions, "Select a Region") –