以下是视图模型
public class ArticleViewModel
{
public string ID { get; set; }
public string Title{ get; set; }
public string Body { get; set; }
public List<BETag> TagsList { get; set; }
}
public class BETag
{
public string ID { get; set; }
public string Name { get; set; }
}
动作
[HttpPost, AuthorizeEx]
public ActionResult AddArticle(ArticleViewModel articleViewModel)
{
//articleViewModel.Tags.Count == 0
//Request.Form["TagsList"] == "tag1, tag2..."
}
和AddArticle.cshtml
@Html.TextAreaFor(m => m.TagsList )
我的问题是为什么articleViewModel.Tags.Count
等于0
,但是
Request.Form["TagsList"]
等于"tag1, tag2..."
?如何正确绑定ArticleViewModel
?
答案 0 :(得分:1)
列表在MVC中不起作用。你需要使用类似EditorFor(m =&gt; m.TagsList)的东西,然后你需要创建一个BETag EditorTemplate。但这只是问题的一部分,也不会对你有用。
你真正想要的只是一个带有你的标签列表的简单字符串,例如
public string TagListString {get;set;}
然后,在您的控制器中,您解析字符串并提取所有标记,然后将它们添加到TagsList。
var tags = TagListString.Split(' '); // assumes only single space between tags,
// you should add more filtering to make sure
foreach(var tag in tags) {
TagList.Add(new BETag() { Name = tag });
}
MVC适用于单个项目,而不是复杂类型。在某些情况下,存在一些内置处理来分解复杂类型,并自动迭代集合,但这些不适用于您的情况,因为您要编辑单个字段中的所有项目。因此,您唯一的选择是在post方法中解析字段并将数据放在您想要的位置。