2014-01-23 76 views
1

我想添加新的多記錄到數據庫, 和我設計視圖有多種形式來提交數據並插入它。如何從FormCollection中分離值ASP.NET MVC

我的觀點有: - 項目1 @Html.EditorFor(modelitem => item.Description) ... 。 。 。 - 項目2 @Html.EditorFor(modelitem => item.Description) ...

我用

[HttpPost] 
     public ActionResult Edit(FormCollection c) 
     { 
var desc = c.GetValue("item.Description"); 

} 

我用它來做獲得價值,但我想說明的獨立價值。 我用.Split(',');,但如果有說明價值:

「測試值,測試desc」 的

所以我不能使用它。

所以有人告訴我。如何循環項目以插入它

+0

改爲使用模型綁定。 – RollerCosta

+0

你能詳細告訴我嗎? –

回答

1

您可以在字段的ID的前綴,以便您可以檢索兩個單獨的字段;

@Html.TextBoxFor(x => x.SomeProperty, new { @id = "item_1_description" }); 

而且這將允許您從FormCollection獲取該特定值;

string description = c.GetValue("item_1_description"); 

然而,如果你可以利用strongly-typing your views,它會更乾淨。在你的位置,我會創建一個代表你的兩個對象的ViewModel。由於我不知道你的數據類型是什麼,我將使用Person的例子,看起來像這樣;

public class Person 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

要在一個表單中添加兩個人,您需要創建一個`ViewModel'來表示表單的外觀 - 兩個人的展開版本;

public class MuliplePeopleViewModel 
{ 
    public string Person1Name { get; set; } 
    public string Person2Name { get; set; } 
} 

這將生成一個視圖與兩個文本框;

@model MuliplePeopleViewModel 

@Html.EditorFor(x => x.Person1Name); 
@Html.EditorFor(x => x.Person2Name); 

現在你Controller,您可以與我們的新ViewModel更換您的FormCollection使用,將自動綁定的文本框的到相關屬性的值;

[HttpPost] 
public ActionResult Edit(MuliplePeopleViewModel viewModel) 
{ 
    string person1Name = viewModel.Person1Name; 
} 

深思:我不能完全肯定DefaultModelBinder將結合ViewModel的不平版本,如;

public class MuliplePeopleViewModel 
{ 
    public Person Person1 { get; set; } 
    public Person Person2 { get; set; } 
} 

但也許你可以試試!從筆者

編輯

發表意見之後,你還可以創建一個ViewModel包含一個ICollection<Person>;

public class MuliplePeopleViewModel 
{ 
    public ICollection<Person> People { get; set; } 
} 

而在您的視圖中,您可以遍歷每個的收集和顯示字段;

@model MuliplePeopleViewModel 

@foreach (Person person in Model.People) 
{ 
    @Html.EditorFor(x => person.Name); 
} 

現在,DefaultModelBinder現在應該爲您提供在您的操作中使用的人員列表。但是,如果不是,您可能需要編寫一個custom model binder

更多的想法:您可以使用utilise EditorTemplates來簡化您的視圖。

讓我知道如果我可以進一步幫助。

馬特

+0

感謝您的幫助。我現在可以用你的答案來做。 –

+0

但是你有另一種解決方案嗎?如果我想插入/更新多人,並且我不知道之前有多少人。所以我不知道,我宣佈了多少變數。 –

+0

@VuongNguyen我已經更新了我的答案以獲取人員列表。 –

1

你也可以使用 -

Request.Form["Your property Name"] 

工作代碼:

型號 -

public class MyClass 
{ 
    public string MyName { get; set; } 
} 

視圖 -

@using (Html.BeginForm("SubmitData","Post", FormMethod.Post)) 
{ 

    <div class="form-horizontal"> 
     <h4>MyClass</h4> 
     <hr /> 

     @Html.ValidationSummary(true) 

     <div class="form-group"> 
      @Html.LabelFor(model => model.MyName, new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.MyName) 
       @Html.ValidationMessageFor(model => model.MyName) 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Save" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 

在POST,你可以這樣訪問它 -

[HttpPost] 
public ActionResult SubmitData(MyClass c) 
{ 
    var name = Request.Form["MyName"]; 
    return View(); 

} 

我們將在名稱變量的輸入值。檢查下面的圖像。 enter image description here

同樣在上面的代碼中,我展示瞭如何進行模型綁定。如果你使用變量'c',那也會從UI中獲得價值。檢查下面的圖像。 enter image description here

+0

感謝您的幫助 –

0

試試這個:

[HttpPost] 
public ActionResult Edit(FormCollection c, string[] description) 
{ 

} 

所以你必須在數組中的值。

+0

感謝您的幫助 –

相關問題