[英]Picking out Just JSON Data Returned from ASP.NET MVC3 controller Update
我從JavaScript客戶端返回的數據僅包括已更改的數據。 也就是說,我可能有一個數組,每行包含下載的JSON的10列,但是在Update上,只有返回給我的數據才是更新的數據。 在我的更新中,我只想更新那些已更改的列(不是全部)。
換句話說,我的代碼如下所示,但是由於要傳遞“ President”類的實例,因此我無法知道原始JSON的實際含義。
我如何才能更新我的MVC3更新方法中的內容,而不是全部列。 也就是說,其中的8列可能不會進入,並且在傳入的“數據”參數中將為null。因此,我不想擦除所有數據。
[HttpPost]
public JsonResult Update(President data)
{
bool success = false;
string message = "no record found";
if (data != null && data.Id > 0)
{
using (var db = new USPresidentsDb())
{
var rec = db.Presidents.FirstOrDefault(a => a.Id == data.Id);
rec.FirstName = data.FirstName;
db.SaveChanges();
success = true;
message = "Update method called successfully";
}
}
return Json(new
{
data,
success,
message
});
}
rec.FirstName = data.FirstName ?? rec.FirstName;
在這種情況下,我會使用反射,因為代碼會像
if (data.FirstName != null)
rec.FirstName = data.FirstName
.
.
.
對所有領域等等
使用反射,這樣做會更容易。 看到這個方法
public static void CopyOnlyModifiedData<T>(T source, ref T destination)
{
foreach (var propertyInfo in source.GetType().GetProperties())
{
object value = propertyInfo.GetValue(source, null);
if (value!= null && !value.GetType().IsValueType)
{
destination.GetType().GetProperty(propertyInfo.Name, value.GetType()).SetValue(destination, value, null);
}
}
}
用法
CopyOnlyModifiedData<President>(data, ref rec);
請注意,這不適用於value
類型屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.