2011-06-14 18 views
2

我在這裏將數據從視圖傳遞到控制器的問題很少。這是一個小的CRUD網站,這裏有一些代碼來解釋我的問題。MVC將數據從視圖傳遞到cotroller

Model: 
public class TempModel{ 
    public List<Temp> Temp1 { get; set; } 
} 

View: 
@{ using (Html.BeginForm()) { 
    for (int i = 0; i < TempModel.Temp1.Count; i++) 
    { 
     @Html.LabelFor(model => model.Temp[i].ModifiedBy, "Modified By: ") 
     @Html.TextBoxFor(model => model.Temp[i].ModifiedBy) 

     <button name="button" value="update">Update</button> 
    } 
} 

Controller: 
[HttpPost] 
    public ActionResult Index(TempModel.Temp1, string button){ 

    switch (button) 
     { 
      case "delete": 
       break; 
      case "update": 
       UpdateSingleTemp(TempModel.Temp1); 
       break; 
     } 
} 

現在我想要做的就是傳遞哪些Temp1 [i]對象在用戶按下更新時被更改。 必須有簡單的方法來告訴控制器ItemId或dataIsChanged或類似的東西,但我現在無法弄清楚。我很新的MVC。

編輯: 我設法解決這個問題..最簡單的方法就是使用多個表單並從模型中刪除列表。

@for (int i = 0; i < TempModel.Count; i++)  
    @{ using (Html.BeginForm()) {   
    { 
     @Html.LabelFor(model => model[i].ModifiedBy, "Modified By: ") 
     @Html.TextBoxFor(model => model[i].ModifiedBy) 

     <button name="button" value="update">Update</button> 
    } 
} 

回答

1

這是不可能的。要跟蹤哪個字段被更新與否,您必須存儲每個字段的散列,並在回發後,將散列與提交值的散列進行比較,就像WebForms在頁面中存儲ViewState一樣。基於更新的字段,您可以基於更新的字段觸發更新方法。

0

爲了簡單起見,您可以使用Html Input Disabled Attribute。已禁用的字段不會發布到服務器,因此所有項目控制器都會收到,並嘗試由用戶更新。但是,要小心使用敏感信息,因爲Web服務器不應該信任用戶提供的值 - 用戶可以簡單地啓用所有字段並將其發佈。如果您想知道用戶嘗試編輯哪些值並使用新值覆蓋存儲庫不會導致問題,則此方法非常有用。有了敏感信息,更改檢查應該在服務器端完成@Adeel建議。 第一次渲染具有禁用屬性的所有輸入,然後爲每個可編輯字段提供附加按鈕以啓用它們。對於禁用屬性進行渲染,請使用This Overload

相關問題