Основываясь на вас комментарии: Давайте предположим, что у вас есть страница ASPX, которая загрузить все приложения, которые имеют (от активной директории, DB или любой другой), после того, что назначение всех приложений, которые текущий пользователь имеют (также получать эти приложения от того, что когда-либо) ... так что в вашем Page_Load вы будете иметь что-то, как показано ниже:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//Load all applications
var apps = loadAllApplications();
//Load user applications
var myApps = loadUserApplications();
//Bind to checkboxlist, assuming my checkboxlist ID "chksApps"
chksApps.DataSource = apps.Select(x => new ListItem
{
Value = x.Id.ToString(),
Text = x.Name,
Selected = myApps.Any(a => x.Id == a)
});
chksApps.DataBind();
}
}
//lets say I have a Application class like that
public class Application
{
public int Id { get; set; }
public string Name { get; set; }
}
private List<int> loadUserApplications()
{
// if user already have "Paint", "Chrome" assigned
var myApps = new List<int>() { 2, 4 };
return myApps;
}
private List<Application> loadAllApplications()
{
//for testing I will create a dummy list of applications
var applications = new List<Application>() {
new Application { Id = 1, Name = "Visual Studio" },
new Application { Id = 2, Name = "Paint" },
new Application { Id = 3, Name = "Notepad" },
new Application { Id = 4, Name = "Chrome" }
};
return applications;
}
так до сих пор пользователь сможет проверить, снимите то, что когда-либо он хочет. так что ваш CheckBoxList AutoPostBack = False
поэтому, когда он закончить редактирование, предполагая, что он представит, что на сервере, поэтому он будет иметь кнопку отправки (позволяет сказать, что это идентификатор «btnSave»
protected void btnSave_Click(object sender, EventArgs e)
{
//Load user applications
var myApps = loadUserApplications();
//get selected Application
var selectedApps = chksApps.Items.Cast<ListItem>()
.Where(x => x.Selected)
.Select(x => int.Parse(x.Value)).ToList();
// send request to owner to add those below apps for user "newSelectedApps"
var newSelectedApps = selectedApps.Except(myApps).ToList();
// send request to owner to remove those below apps "newUnSelectedApps"
var newUnSelectedApps = myApps.Except(selectedApps).ToList();
// those below are the unchanged apps "unChangedApps"
var unChangedApps = myApps.Intersect(selectedApps).ToList();
}
это лучше, чем при использовании ViewState
для выполнения
Привет Sherif Ahmed, я получаю ERRO ниже: System.Runtime.Serialization.SerializationException: Le тип «System.Linq.Enumerable + WhereSelectEnumerableIterator'2 [[System.Web.UI.WebControls.ListItem, System.Web, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a], [System.String, mscorlib, Version = 2.0.0 .0, Culture = neutral, PublicKeyToken = b77a5c561934e089]] 'dans l'assembly' System.Core, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 ' – Codes
Эта ошибка появляется в var unSelectedChanged = oldUnSelected.Except (newUnSelected); второй – Codes
проверить обновление –