2013-05-26 68 views
2

如果某個視圖允許僅編輯一個屬性,但所有其他屬性都正在顯示(DisplayFor,non-editable),什麼是一種好方法設計將更改值交給控制器?MVC 4 - 將View中更改的值交給控制器

現在我有用DisplayFor顯示的所有屬性的隱藏輸入字段,並且控制器獲取傳遞的完整對象。

這幾乎是無效的,我知道只發布該對象的ID和更改後的值就足夠了。

用戶可以輸入值改變這樣的:

@Html.EditorFor(model => model.Verkaufspreis) 
    @Html.ValidationMessageFor(model => model.Verkaufspreis) 

我可以傳遞對象的ID這樣

@Html.ActionLink("Edit", "Edit", new { id=Model.ID }) 

但我怎麼會通過已更改值?謝謝您的意見。

+0

你知道supose改變 –

+0

值後只有IDDisplayName性質實際的發佈請求,那麼你必須使用ajax。 –

+0

@COLD TOLD:是的,我知道價值,這是一個股票交易遊戲,行動是「賣出股票」,用戶必須輸入價格。 – peter

回答

2

,如果你想獲得一個值,你不希望返回模型知道值的名稱,你可以使用的FormCollection

[HttpPost] 
public ActionResult (FormCollectio collection) 
{ 

    string Verkaufspreis1=collection["Verkaufspreis"].ToString(); 

} 
1

MVC允許所有種類的結合,比如你可以去

[HttpPost] 
public ActionResult (int ID, String Verkaufspreis) 
//Have to be the same propery name as your model 
{ 

    //Get original object with the ID 
    //change the "Sell of Stock" field 
} 

這會動態傳遞ID和Verkaufspreis作爲參數。

這將允許您只有ID和值需要更改,因爲您將在回發時從數據庫(或任何地方)獲取剩餘的值,只更新必需的值。

您可以將整個模型作爲參數進行操作,但這意味着如果您沒有將它們傳遞給客戶端,那麼將會有大量空值。

1

而不是在窗體中放置大量隱藏的輸入,您可以這樣做。

只需將更改的值和id發佈到操作方法。從數據源中讀取完整的實體並更新新值並保存。

[HttpPost] 
public ActionResult Update(CustomerViewModel model) 
{ 
    Customer customer=repositary.GetCustomerFromID(model.ID) 
    customer.DisplayName=model.DisplayName; 
    repositary.SaveCustomer(customer); 
    return RedirectToAction("ProfileUpdated"); 
} 

在這種情況下,你需要的,如果你想沒有做的通知控制器從形式

@model CustomerViewModel 
<h2>Update Customer details</h2> 
@using(Html.Beginform()) 
{ 
    Display Name : @Html.TextBoxFor(x=>x.DisplayName) 
    @Html.HiddenFor(x=>x.ID) 
    <input type="submit" value="Save" /> 
} 
相關問題