您可以在字段的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來簡化您的視圖。
讓我知道如果我可以進一步幫助。
馬特
改爲使用模型綁定。 – RollerCosta
你能詳細告訴我嗎? –