首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将剃刀TextArea绑定到模型类属性

将剃刀TextArea绑定到模型类属性
EN

Stack Overflow用户
提问于 2016-12-29 19:09:10
回答 1查看 2.8K关注 0票数 1

我有一个MVC应用程序和一个控制器,它带有类模型(类A)的CRUD。这个类模型有一个属性,它是其他对象(对象B)的列表,每个对象只有一个字符串名称属性。

我需要显示带有列表的视图(我成功地做到了这一点),在用户提交之后,我希望通过逗号拆分文本区域输入,为每个值创建类型B的对象,并将结果插入textArea属性中。

我的意思是我不知道该怎么做。我可以在控制器中获取用户输入吗?

我的textArea:

代码语言:javascript
复制
@Html.TextAreaFor(model => model.List, htmlAttributes: new { @class = "control-label col-md-2" })
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-29 20:28:39

有很多方法可以通过更好的UI来做到这一点(这可能会让你开始使用:Passing the collection of selected values from a Select2-Multi DropDownList to a Controller)

但是,确切地回答您的问题:在ViewModel中使用字符串属性来“包装”List属性。

代码语言:javascript
复制
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 anywhere --使用MyListAsString,它将在ModelBinder执行其操作时获取和设置MyList。

代码语言:javascript
复制
@Html.TextAreaFor(model => model.MyListAsString,
                  htmlAttributes: new { @class = "control-label col-md-2" })

(最佳实践:我已经将List属性重命名为MyList,这样就不会重用现有标识符。你可能不想在不是标签的东西上使用"control- label“类。尝试“表单控件”)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41378497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档