[英]Return List<T> from view to controller in MVC 3
我目前有一個對象Tag
定義如下:
public class Tag
{
public string Name { get; set; }
}
現在,這是一個模型的集合屬性,我將其定義為:
public class MyModel
{
public string Name { get; set; }
public IList<Tag> Tags { get; set; }
}
在我看來,我有以下代碼:
@using (Html.BeginForm())
{
<div>
@Html.LabelFor(m => m.Name)
@Html.TextBoxFor(m => m.Name)
</div>
<div>
<!--
Here I'd like a collection of checkbox inputs, where the selected names
get passed back to my controller via the IList<Tag> collection
-->
</div>
<input type="submit" value="Submit" />
}
如何通過我的模型的IList集合返回我的復選框組(在注釋中指定)中的所選項?
使用編輯器模板
要獲得Checkbox,請在Tag
類中添加另一個Proeprty,以指定是否選中它。
public class Tag
{
public string Name { get; set; }
public bool IsSelected { set; get; }
}
現在,從您的GET
操作,您可以在模型的Tags
屬性中設置標簽列表並將其發送到視圖。
public ActionResult AddTag()
{
var vm = new MyModel();
//The below code is hardcoded for demo. you mat replace with DB data.
vm.Tags.Add(new Tag { Name = "Test1" });
vm.Tags.Add(new Tag { Name = "Test2" });
return View(vm);
}
現在讓我們創建一個編輯模板,轉到View/YourControllerName
並創建一個名為EditorTemaplates
的文件夾,並在那里創建一個與Property type( Tag.cshtml
)同名的新視圖。
立即將此內容添加到新的編輯器模板中。
@model Tag
<p>
<b>@Model.Name</b> :
@Html.CheckBoxFor(x => x.IsSelected) <br />
@Html.HiddenFor(x=>x.Name)
</p>
現在,在主視圖中,使用EditorFor
Html Helper方法調用編輯器模板。
@model MyModel
<h2>AddTag</h2>
@using (Html.BeginForm())
{
<div>
@Html.LabelFor(m => m.Name)
@Html.TextBoxFor(m => m.Name)
</div>
<div>
@Html.EditorFor(m=>m.Tags)
</div>
<input type="submit" value="Submit" />
}
現在,當您發布表單時,您的模型將具有標簽集合,其中選定的復選框將具有IsSelected
屬性的True值。
[HttpPost]
public ActionResult AddTag(MyModel model)
{
if(ModelState.IsValid)
{
//Check for model.Tags collection and Each items IsSelected property value.
//Save and Redirect(PRG pattern)
}
return View(model);
}
像這樣
如果你可以在你的Tag模型中添加一個bool IsChecked屬性,那么你可以在循環中使用EditorFor(或CheckBoxFor)。 訣竅是使用帶索引器的for循環(不是foreach),以便通過視圖主模型訪問屬性。 然后,模型綁定器將為您完成剩下的工作,因此您的POST操作將接收MyModel,其標簽IsChecked屬性設置為正確的狀態。
楷模:
public class Tag
{
public string Name { get; set; }
public bool IsChecked { get; set; }
}
public class MyModel
{
public string Name { get; set; }
public List<Tag> Tags { get; set; }
}
風景:
@model MyMvcApplication.Models.MyModel
@using (Html.BeginForm())
{
<div>
@Html.LabelFor(m => m.Name)
@Html.TextBoxFor(m => m.Name)
</div>
<div>
@for (int i = 0; i < Model.Tags.Count; i++)
{
@Html.DisplayFor(x => Model.Tags[i].Name)
@Html.EditorFor(x => Model.Tags[i].IsChecked)
}
</div>
<input type="submit" value="Submit" />
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.