【发布时间】:2017-08-13 09:39:56
【问题描述】:
我正在尝试添加多行输入,或者在脚本的帮助下添加多个输入以将它们作为 List 提交给控制器。如果我使用 TextBoxFor,我会在此列表的控制器中得到 count=0,如果我使用 EditorFor,则为 null。 正如我目前所了解的那样,我只是在形成一个对象,而不是一个对象列表,这就是为什么它是 null 或 count=0 ...但是如何正确地做到这一点?
查看:
<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:
位于 Shared/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();
}
更新:
填充集合并将模型传递给视图:
[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 方法以及您如何填充集合并将其传递给视图
-
@StephenMuecke 我已经更新了帖子。我的 GET 方法很简单——我只返回 View();我需要将 List
-
return View();不会将模型传递给视图,因此MediaRSSURL是null。因此没有要显示的项目
标签: c# asp.net-mvc