채울 확인란 목록이 있으며 아마도 page_load를 사용하여 작업을 수행 할 수 있습니까? Web Forms 모델 바인딩 CheckBoxList가로드시 미리 선택됨
protected void Page_Load(object sender, EventArgs e)
{
//...
var query = logic.GetPlanCoverages(planName);
cbl_MemberCoverages.DataSource = coverages;
cbl_MemberCoverages.DataBind();
}
그러나 Asp.Net이 모델은 지금이 가질 수 바인딩 도입했기 때문에 :
<asp:CheckBoxList runat="server" ID="cbl_MemberCoverages"
SelectMethod="BindMemberCoverages" DataTextField="CoverageName" DataValueField="CoverageCode">
</asp:CheckBoxList>
을 그리고 숨김 코드 :
public IEnumerable<PlanCoveragesDomainModel> BindMemberCoverages()
{
var planName = logic.GetShortPlanName();
var query = logic.GetPlanCoverages(planName);
return query;
}
하지만 ...이 Model Binding에서 여전히 좋아하지 않는 무언가, 또는 양식을 미리 채워야 할 때 제대로 사용하는 방법을 제대로 이해하지 못하는 것일 수도 있습니다.
일반적인 시나리오는 사용자 목록에서 편집하려는 경우입니다. 새 페이지를 열면 많은 필드가있는이 양식을 채 웁니다. 아마 사용자 중 한 명은 이미 이러한 보상 범위 중 일부를 할당했습니다. 하지만 현재로서는 내가 찾은 유일한 해결 방법은 다음과 같습니다.
public IEnumerable<PlanCoveragesDomainModel> BindMemberCoverages([QueryString]string mode)
{
if (!"edit".Equals(mode, StringComparison.InvariantCultureIgnoreCase))
{
var planName = logic.GetShortPlanName();
var query = logic.GetPlanCoverages(planName);
return query;
}
var coverages = logic.GetPlanCoverages(CurrentModel.PlanName).Select(c => new ListItem(c.CoverageName, c.CoverageCode)).ToArray();
cbl_MemberCoverages.Items.AddRange(coverages);
cbl_MemberCoverages.DataSource = coverages;
cbl_MemberCoverages.DataBind();
foreach (ListItem listItem in cbl_MemberCoverages.Items)
{
listItem.Selected = CurrentModel.Coverages.Any(c => c.Value == listItem.Value);
}
return null;
}
사람들, 아이디어가 있습니까?
당신은 모델 바인딩이있는 사용자를 편집 할 수 있지만 다른 사용자의 값 형태로 미리 채워 갖고 싶어? 이것은 처음에는 모델 바인딩이라는 개념과 반대되는 것처럼 보이지만 컨트롤에 바인딩하기 전에 사용자 객체의 데이터를 미리 채우는 것이 더 쉬울 수도 있습니다. – Seano666
내가 이해하면 ... 내가 원하는대로, '편집'을 클릭하고 편집 페이지로 이동 한 후 탐색 페이지에서 선택한 'MemberCoverage'를 편집 페이지에서 선택한 것으로 표시하겠습니까? –
[Henryk Budzinski] 정확히 무슨 뜻인지 :) –