2012-04-27 143 views
0

查看客戶端ID爲0時更新模型實體

@using (Html.BeginForm("UpdateClient", "Client")) { 

控制器

[HttpPost] 
public ActionResult UpdateClient(Client client) 
{    
    if (ModelState.IsValid) {     
     bool ret = _clientRepository.UpdateClient(client);     
     return RedirectToAction("Index", "Home"); 
    } 
    return View(client); 
} 

public bool UpdateClient(Client client) 
{ 
    using (var context = new Entities()) { 
     context.AttachTo("Clients",client); 
     context.ObjectStateManager.ChangeObjectState(client, EntityState.Modified); 
     context.SaveChanges(); 
    } 
    return true; 
} 

當我在控制器中調用UpdateClient時,客戶端ID是0.如何傳遞我已更新的ID?

+0

你什麼時候調用控制器的UpdateClient?你可以顯示該代碼嗎? – bugfixr 2012-04-27 15:08:40

+0

我使用提交按鈕從視圖中調用控制器方法(UpdateClient)。 – okenshield 2012-04-27 15:20:29

回答

0

當您從客戶端代碼(即瀏覽器)調用UpdateClient方法時,需要確保將要設置的字段回發到接收頁面。

例如,我經常使用jQuery和簡單的ajax調用來將數據發回服務器。該職位需要包含了客戶端對象匹配的值:

$.post("/controller/UpdateClient", { 
     "clientId": 1, 
     "otherProp1": "some value", 
     "otherProp2": "some value 2" 
    }, function (data) { 

    } 
}; 

在你的情況,你可能需要確保你有一個包含客戶端Id的名字命名字段,以便它被髮布到一個input場服務器方式:

<input type="hidden" id="clientId" name="clientId" value="1" /> 

此外,您可能會發現上一步Fiddler2,並用它來觀看實際上被髮送到服務器的數據。在處理這類事情時,這是非常寶貴的。

0

有沒有太多的信息給我們,但你的id可以是0在3例。 1.如果您在客戶端生成或輸入ID,您只是沒有正確發佈。錯過了隱藏的輸入,錯誤的變量名稱。 2.如果你生成我想在模型構造函數中,你應該記住,有LL默認構造函數調用。然後它會用新的值覆蓋它的屬性。看看你的id屬性有什麼可以阻止或覆蓋傳入的值。 3.如果你在數據庫級別生成Id,那麼你應該知道創建新對象時數據庫不會返回id。 它是一個常見的問題,但我不是很有經驗(我們在應用程序的業務邏輯中生成id)。

我相信你會跟蹤問題,如果你會再看看你的代碼。