我的班级说One
有以下属性
class One
{
public int Id {get; set;}
public string Name {get; set;}
public string Salary {get; set;}
public string Designation {get; set;}
}
现在我在ViewModel中创建了一个类似One
的列表
public class OneViewModel
{
public OneViewModel(){
lstOne = new List<One>();
}
List<One> lstOne {get;set;}
public int UserId {get;set;}
}
并在ActionResult的列表中添加了几个对象,并将其传递给模型。
public ActionResult Index()
{
OneViewModel model = new OneViewModel();
model.lstOne.Add(new One{Id=1,Name="Sam",Salary="5000", Designation="Manager" });
model.lstOne.Add(new One{Id=2,Name="Akash",Salary="6000", Designation="Manager" });
model.lstOne.Add(new One{Id=3,Name="Sid",Salary="7000", Designation="Manager" });
return View(model);
}
现在调用post方法时,我想找出lstOne
中删除或添加了哪些对象,以及lstOne
中给定对象的哪些属性已更改。
[HttpPost]
public ActionResult Index(OneViewModel model)
{
//what to do here, any ideas
}
我不想使用迭代列表并比较对象和属性的旧方法,还有其他方法。我在MSDN网站上看到了ObservableCollection
和NotifyCollectionChangedEventArgs
,但是,为了解决我的问题,我无法获得正确的方法来实现它。
答案 0 :(得分:0)
我对此不确定,我没有在任何地方实施
使用String n = JOptionPane.showInputDialog("Whats your name?")
代替ObservableCollection
在你的viewmodel中,你有类似的东西。
List
在你的模特你可以得到类似的东西。
public class OneViewModel
{
public OneViewModel()
{
ObservableCollection<One> observableColleciton = new ObservableCollection<One>();
observableColleciton.CollectionChanged += list_CollectionChanged;
}
public bool IsCollecitonDirty { get; set; }
static void list_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
switch (e.Action)
{
case System.Collections.Specialized.NotifyCollectionChangedAction.Add:
isCollectionDirty = true;
break;
case System.Collections.Specialized.NotifyCollectionChangedAction.Move:
break;
case System.Collections.Specialized.NotifyCollectionChangedAction.Remove:
isCollectionDirty = true;
break;
case System.Collections.Specialized.NotifyCollectionChangedAction.Replace:
break;
case System.Collections.Specialized.NotifyCollectionChangedAction.Reset:
break;
default:
break;
}
}
}
使用class One : INotifyPropertyChanged
{
private int _id;
public int Id
{
get { return _id; }
set
{
_id = value;
NotifyPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
IsModelDirty = true;
// PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public bool IsModelDirty { get; set; }
}
确保您的收藏更改并确保您可以尝试使用
IsCollectionDirty
答案 1 :(得分:0)
好的,让我们分析一下。
Index(OneViewModel model)
Index(OneViewModel model)
在Index()
中,您可以分析指标并开展工作。一切正常。
但是这个词并不理想而且我是坏人,我想伤害你的应用程序。或者出现问题,客户端工作不好。
Index(OneViewModel model)
Index(OneViewModel model)
在trigger updatecontactrolecount on Opportunity (before insert, before update)
{
Boolean isPrimary;
Integer iCount;
Map<String, Opportunity> oppty_con = new Map<String, Opportunity>();//check if the contact role is needed and add it to the oppty_con map
for (Integer i = 0; i < Trigger.new.size(); i++)
{
oppty_con.put(Trigger.new[i].id,
Trigger.new[i]);
}
isPrimary = False;
for (List oppcntctrle :[select OpportunityId from OpportunityContactRole where (OpportunityContactRole.IsPrimary = True and OpportunityContactRole.OpportunityId in :oppty_con.keySet())])
{
if (oppcntctrle .Size() >0)
{
isPrimary = True;
}
}
iCount = 0;
for (List oppcntctrle2 : [select OpportunityId from OpportunityContactRole where (OpportunityContactRole.OpportunityId in :oppty_con.keySet())])//Query for Contact Roles
{
if (oppcntctrle2 .Size()>0)
{
iCount= oppcntctrle2 .Size();
}
}
for (Opportunity Oppty : system.trigger.new) //Check if roles exist in the map or contact role isn't required
{
Oppty.Number_of_Contacts_Roles_Assigned__c = iCount;
Oppty.Primary_Contact_Assigned__c =isPrimary;
}
}
中,您可以分析指标,但由于未设置指标,您无法检测到更改。
或者某人使用您的收藏品来创建客户并且他不知道他必须设置指标而他不会这样做。或者......许多其他情况。
你可以只依靠100%肯定的东西。在这种情况下,正如我在评论中所说,在调用之间,集合不属于您。你无法控制它发生了什么以及如何发生。
唯一的好方法是比较。