我有一個視圖模型來更新資料(來自 API,而不是視圖),引數如下:
public string Name { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
我只想更新“名稱”,所以我的引數如下:
{
"name": "my name"
}
它的名字變成了“我的名字”,但它的電子郵件和電話變成了空。如果輸入表單中不存在引數,如何避免引數變為空值?謝謝...
uj5u.com熱心網友回復:
您必須調整更新的任何內容,以便它理解“null 表示不設定值,而不是將值設定為 null”
例如,如果您正在運行 db update 查詢,您可以:
UPDATE person
SET
name = COALESCE(@name, name),
email = COALESCE(@email, email),
phone = COALESCE(@phone, phone)
WHERE
id = @id
現在,如果任何值被提供為 null,則更新會將列設定為與當前相同的值(即無操作)
如果您正在調整 ac# 物件,您可以采用類似的方法:
var p = db.FindPerson(viewmodel.PersonId);
p.Name = viewmodel.Name ?? p.Name;
...
uj5u.com熱心網友回復:
如我所見,您的軟體設計存在問題或誤解。
如果此 API 端點僅用于更新名稱欄位,則您的 ViewModel 中不應包含其他欄位。但是,如果您在某些情況下更新其他欄位,那么您也應該傳遞它們的值。
因此,您可能需要先呼叫 Get 端點以獲取客戶端“例如網頁”中所需的所有資料,然后允許此客戶端重新發送完整的 JSON,而不僅僅是名稱。或者您可能只需要一個只使用名稱的端點。
如果您使用 EF,另一種解決方案是在更新 EF 物體時忽略空欄位。例如
...
var entity = dbContext.Employees.FirstOrDefault(e => e.Id == 3);
entity.Name = request.Name;
await dbContext.SaveChangesAsync();
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/360513.html
標籤:C# 网站 asp.net-mvc-viewmodel
上一篇:如何更快地進行多個API呼叫?
