[英]Web Forms Model Binding CheckBoxList preselected on load
我有一個要填充的復選框列表,也許我可以使用page_load並從那里開始工作,對嗎?
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;
}
但是...在“模型綁定”中我仍然不喜歡某些東西,或者可能只有我自己無法解決在必須預填充表單時如何正確使用它的問題。
一個典型的場景是當我要從用戶列表中編輯一個時。 我打開一個新頁面,並且此表單具有很多要填充的字段。 也許其中一個用戶已經分配了其中一些覆蓋率。 但是目前,我發現的唯一解決方法是:
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;
}
伙計們,有什么想法嗎?
為您的CheckBoxList控件實現OnDataBound
事件。
<asp:CheckBoxList runat="server" ID="cbl_MemberCoverages"
SelectMethod="BindMemberCoverages" DataTextField="CoverageName"
DataValueField="CoverageCode"
OnDataBound="cblMemberCoverages_DataBound">
</asp:CheckBoxList>
碼
protected void cblMemberCoverages_DataBound(object sender, EventArgs e)
{
var chkBoxList = sender as CheckBoxList;
var item = chkbox.Items.FindByValue(queryStringCoverageCode);
if(item != null)
item.Selected = true;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.