例如上結合起來,我有這個類獲得修改的對象,並與原單對象的服務器
class Person{
private int _id = int.MinValue;
private string _name = string.Empty;
private int _age = int.MinValue;
private string _city = string.Empty;
public string Id{ get { return _id ; } set { _id = value; } }
public string Name{ get { return _name; } set { _name = value; } }
public int Age{ get { return _age; } set { _age = value; } }
public string City{ get { return _city ; } set { _name = city; } }
}
和我顯示了在表人的名單。在這個表中有一個「in place/inline」:一些Person的屬性在表格中有一個單元格(td),所以當我通過javascript/jquery編輯一個單元格時,我創建了具有更改值的json對象,而我發送給服務器。 JSON對象僅包含屬性變化:如果我編輯「姓名」 JSON對象將是:
{"obj":{"Id":"1","Name":"Anna"}}
但對象者的服務器來作爲
Id = 1, Name = "Anna", Age = 0, City = null
所以問題是 :執行更新存儲過程我必須創建具有所有原始值的對象,以修改屬性的異常。在這個例子中,我希望得到這個對象:
Id = 1, Name = "Anna", Age = 25, City = "New York"
要創建這個對象我用這個方法
public static TEntity CopyTo<TEntity>(this TEntity OriginalEntity, TEntity NewEntity){
PropertyInfo[] oProperties = OriginalEntity.GetType().GetProperties();
foreach (PropertyInfo CurrentProperty in oProperties.Where(p => p.CanWrite))
{
if (CurrentProperty.GetValue(OriginalEntity, null) == null)
{
CurrentProperty.SetValue(OriginalEntity, CurrentProperty.GetValue(NewEntity, null), null);
}
}
return OriginalEntity;
}
如果新的對象Person
有null
值的屬性,然後我把原單值從原始Person
(NewEntity
)。這種方式不適用於數字,因爲從客戶端到服務器Age
屬性成爲0
而不是null
。
我該如何解決這個問題?考慮到我不能使用:
- 可空類型,因爲我應該在整個項目中修改很多代碼行;
- 該表可能不包含Person的所有屬性,所以我不能在javascript中創建整個對象,然後只更改修改後的值。
我希望我和我的英語不好
但是如果一個人的所有屬性都可以在該表中編輯,那麼應該發送所有這些值,而不管它們是否被更改。我的意思是,即使用戶只更改了名稱,你的JS函數也應該發送該行中的所有其他可編輯值。你不能像這樣修改你的JS嗎? – Shades88
如果您沒有更改爲'Nullable',我看不到任何明智的方式來區分*故意* 0和「未設置」0.坦率地說,有時候正確的做法是更改代碼。 –
我希望有一些解決方法...創造性的解決方案;) – Webman