2011-03-03 37 views
3

我有一個強類型的視圖,模型中有一個自定義對象列表。MVC3,從列表中獲取更新的表單數據

在視圖中顯示我的文本框列表中的每個對象:

@using (Html.BeginForm("SaveData", "Localization", FormMethod.Post)) 
{ 
     foreach (YB.LocalizationGlobalText m in Model.GlobalTexts) 
    { 
      @Html.Label(m.LocalizationGlobal.Name) 
      @Html.TextBoxFor(model => m.Text) 
      <br /> 
    } 
    <input type="submit" value="Save" /> 
} 

現在我怎麼才能從文本框更新的數據在我的模型。 我可以在看的FormCollection更新的數據有:

[HttpPost] 
    public virtual ActionResult SaveData(FormCollection form) 
    { 
     // Get movie to update 
     return View(); 
    } 

形式[「m.Text」] =「testnewdata1,testnewdata」

但我怎麼得到這個映射到模型,所以我有每個對象的更新值。 或者我怎樣才能得到它乾淨地從的FormCollection,這樣的事情..形成[someid] [「m.Text」]

編輯:

我也試過路過模型作爲參數,但模型數據爲空。

[HttpPost] 
     public virtual ActionResult SaveData(LocalizationModel model, FormCollection form) 
     { 
      // Get movie to update 
      return View(); 
     } 

當我看着模型:model.GlobalTexts = NULL

回答

2
[HttpPost] 
public virtual ActionResult SaveData(int movieId, FormCollection form) 
{ 
    // Get movie to update 
    Movie movie = db.Movies.Where(x => x.Id == movieId); 
    // Update movie object with values from form collection. 
    TryUpdateModel(movie, form); 
    // Do model validation 
    if (!ModelState.IsValid) 
     return View(); 
    return View("success"); 
} 

編輯看到這個問題,我問了一段時間後:How to use multiple form elements in ASP.NET MVC

可以說,你有這樣的觀點:

@model IEnumerable<CustomObject> 

@foreach (CustomObject customObject in Model) 
{ 
    <div> 
     @Html.TextBox(customObject.CustomProperty); 
     <!-- etc etc etc --> 
    </div> 
} 

重構這樣的:

@model IEnumerable<CustomObject> 

    @for (int count = 0; count < Model.Count(); count++) 
    { 
     <div> 
      <!-- Add a place for the id to be stored. --> 
      @Html.HiddenFor(x => x[count].Id); 

      @Html.TextBoxFor(x => x[count].CustomProperty); 
      <!-- etc etc etc --> 
     </div> 
    } 
在動作方法

現在這樣做:

public virtual ActionResult SaveData(IEnumerable<CustomObject>) 
{ 
    // You now have a list of custom objects with their IDs intact. 
} 

它比更容易如果你使用編輯器,但是我會讓你自己弄清楚它們,因爲它們非常簡單。我連接的問題中接受的答案顯示了一個例子。

注意:如果需要,您可以用IList替代IEnumerable。

+0

我該如何獲得ID?我試圖保存每一個對象,而不僅僅是一個。 – redrobot 2011-03-03 21:08:16

+0

我將通過編輯進行更新。鑽孔。我忘了你正在處理一個對象列表。 – Chev 2011-03-03 21:09:23

+0

有你去,告訴我,如果這讓你在正確的軌道上。 – Chev 2011-03-03 21:20:19

0

如果我正確理解你的問題,你可以簡單地使用您的視圖模型作爲保存數據的參數,它會自動將其映射:

[HttpPost] 
public virtual ActionResult SaveData(ViewModelType viewmodel) 
{ 
    // Get movie to update 
    return View(); 
} 
+1

是的,我試過,但模型是空的。 – redrobot 2011-03-03 21:02:06