簡體   English   中英

挑選從ASP.NET MVC3控制器更新返回的僅JSON數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM