将Razor TextArea绑定到Model类属性

时间:2016-12-29 11:09:10

标签: c# asp.net-mvc razor

我有一个MVC应用程序,其中一个控制器领导着类模型的CRUD(A类)。 此类模型具有一个属性,该属性是其他对象的列表(对象B)。每个对象只有一个字符串名称属性。

我需要使用textArea显示视图(并且我成功完成此操作)并在用户提交后,我想用逗号分割textarea输入,为每个值创建类型B的对象并将结果插入list属性。

我的观点是我不知道该怎么做。我能在控制器中获得用户输入吗?

我的textArea:

@Html.TextAreaFor(model => model.List, htmlAttributes: new { @class = "control-label col-md-2" })

1 个答案:

答案 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”类。尝试“形控制”)