我有一个MVC应用程序,其中一个控制器领导着类模型的CRUD(A类)。
此类模型具有一个属性,该属性是其他对象的列表(对象B)。每个对象只有一个字符串名称属性。
我需要使用textArea显示视图(并且我成功完成此操作)并在用户提交后,我想用逗号分割textarea输入,为每个值创建类型B的对象并将结果插入list属性。
我的观点是我不知道该怎么做。我能在控制器中获得用户输入吗?
我的textArea:
@Html.TextAreaFor(model => model.List, htmlAttributes: new { @class = "control-label col-md-2" })
答案 0 :(得分:2)
有一些方法可以通过更好的用户界面执行此操作(这可能会让您入门:Passing the collection of selected values from a Select2-Multi DropDownList to a Controller)
但要回答您的确切问题:在ViewModel中使用字符串属性来“包装”List属性。
public class MyViewModel
{
public List<string> MyList { get; set; }
public string MyListAsString
{
get
{
return string.Join(",", MyList);
}
set
{
MyList = value.Split(new char[] { ',' }).Select(x => x.Trim()).ToList();
}
}
}
在你的剃刀视图中,不要在任何地方使用MyList - 使用MyListAsString,它将在ModelBinder完成任务时获取并设置MyList。
@Html.TextAreaFor(model => model.MyListAsString,
htmlAttributes: new { @class = "control-label col-md-2" })
(最佳实践:我已将List属性重命名为MyList,以免重用现有标识符。并且您可能不希望在非标签的内容上使用“control-label”类。尝试“形控制”)