我想添加一个多行输入或脚本的帮助添加几个输入提交他们作为列表<对象>控制器。如果我使用TextBoxFor我得到计数= 0在此列表的控制器和null如果我用户EditorFor。 据我了解,现在我只是形成一个对象,而不是一个对象列表,这就是为什么它为空或计数= 0 ...但如何做到这一点?TextBoxFor与列表<object>总是返回空值到控制器
检视:
<div>
@using (Html.BeginForm())
{
//other form-groups
<div class="form-group">
@Html.LabelFor(m => @Model.MediaRSSURL)
@Html.TextBoxFor(m => @Model.MediaRSSURL, "URL/URL", new {htmlAttributes = new {@class = "form-control"}})
</div>
<input type="submit" value="Submit"/>
}
</div>
类具有列表<对象>:
public class Media
{
//other properties
public List<URL> MediaRSSURL { get; set; }
}
类对象的:
public class URL
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string strURL { get; set; }
public int MediaId { get; set; }
public Media Media { get; set; }
}
EditorTemplate:
驻留在共享/ EditorTemplates/URL
@model Domain.Entities.URL
<div class="form-group">
@Html.TextBoxFor(m => Model.strURL, new {htmlAttributes = new {@class = "form-control"}})
@Html.HiddenFor(m => Model.Id)
@Html.HiddenFor(m => Model.MediaId)
</div>
控制器POST方法:
[System.Web.Mvc.HttpPost]
public RedirectToRouteResult AddMedia([FromBody] Media media)
{
if (ModelState.IsValid)
{
_iMediaRepository.SaveMedia(media);
}
return RedirectToAction("GetAllMedia");
}
控制器GET方法:
[System.Web.Mvc.HttpGet]
public ViewResult AddMedia()
{
return View();
}
UPDATE:
填充的收集和传递模型查看:
[System.Web.Mvc.HttpGet]
public ViewResult AddMedia()
{
var model = new Media();
var newUrl = new URL();
model.MediaRSSURL = new List<URL>();
model.MediaRSSURL.Add(newUrl);
return View(model);
}
改变了编辑模板:
@model IEnumerable<Domain.Entities.URL>
<div class="form-group">
@foreach (URL url in Model)
{
@Html.EditorFor(m => url.strURL, new { htmlAttributes = new { @class = "form-control" } })
@Html.HiddenFor(m => url.Id)
@Html.HiddenFor(m => url.MediaId)
@Html.HiddenFor(m => url.Media)
}
</div>
你不能一个文本框绑定到复杂对象的集合。你有一个'EditorTemplate',所以使用'@ Html.EditorFor(m => m.MediaRSSURL)',它将根据模板为你的集合中的每个对象生成html。 –
@StephenMuecke我试过了,如果使用EdirorFor –
,我会得到null然后这意味着你没有收集任何物品!显示你的GET方法,以及如何填充集合并将其传递给视图 –