我有一张带有复选框列表的表格.用户可以 Select 所有值、无值或介于两者之间的任何值.示例:

球门截图

我想将结果作为逗号分隔的列表写入数据库.在上面的例子中,"苹果,香蕉".我有点困惑如何为此创建模型,以及如何将从视图到控制器的结果放入逗号分隔的列表中?

推荐答案

下面是一个如何做到这一点的例子.

家庭模特.反恐精英

public class HomeModel
{
    public IList<string> SelectedFruits { get; set; }
    public IList<SelectListItem> AvailableFruits { get; set; }

    public HomeModel()
    {
        SelectedFruits = new List<string>();
        AvailableFruits = new List<SelectListItem>();
    }
}

家庭控制器.反恐精英

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new HomeModel
        {
            AvailableFruits = GetFruits()
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(HomeModel model)
    {
        if (ModelState.IsValid)
        {
            var fruits = string.Join(",", model.SelectedFruits);

            // Save data to database, and redirect to Success page.

            return RedirectToAction("Success");
        }
        model.AvailableFruits = GetFruits();
        return View(model);
    }

    public ActionResult Success()
    {
        return View();
    }

    private IList<SelectListItem> GetFruits()
    {
        return new List<SelectListItem>
        {
            new SelectListItem {Text = "Apple", Value = "Apple"},
            new SelectListItem {Text = "Pear", Value = "Pear"},
            new SelectListItem {Text = "Banana", Value = "Banana"},
            new SelectListItem {Text = "Orange", Value = "Orange"},
        };
    }
}

指数cshtml

@model DemoMvc.Models.HomeModel
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        @using (Html.BeginForm("Index", "Home"))
        {
            foreach (var item in Model.AvailableFruits)
            {
                <div class="checkbox">
                    <label>
                        <input type="checkbox"
                               name="SelectedFruits"
                               value="@item.Value"
                               @if(Model.SelectedFruits.Contains(item.Value))
                               {
                                   <text> checked </text> 
                               } 
                               /> @item.Text
                        </label>
                    </div>
            }
            <div class="form-group text-center">
                <input type="submit" class="btn btn-primary" value="Submit" />
            </div>
        }
    </div>
</body>
</html>

这将导致后处理中出现以下情况:

Post Action

Asp.net相关问答推荐

为什么 Web 架构应该是松耦合的?

将 NUnit 添加到 ASP.NET MVC 测试框架的选项中

Web api 不支持 POST 方法

文本框的输入按键触发事件

System.Web.HttpContext 无法识别

使用 ASP.NET WebForms 的 jQuery DataTables 服务器端处理

在 IIS 上托管 ASP.NET 5 项目

为什么 Asp.Net Identity IdentityDbContext 是一个黑盒?

如何配置 ELMAH 以使用 Windows Azure?我在 Elmah.axd 上得到 404

在生产中使用 LocalDb 是否正常?

如何在 ASP.NET 站点中添加 favicon.ico

HttpContext.Current 在 MVC 4 项目中未解决

.NET AJAX 调用 ASMX 或 ASPX 或 ASHX?

ASP.net 中是否有 after Page_Load 事件

System.Reflection.Assembly.LoadFile 锁定文件

ASP .NET 单例

ASP.NET 身份提供程序 SignInManager 不断返回失败

为什么在 MVC4 Razor 布局文件中无法识别 @Scripts 和 @Styles 命令?

ContentResult 与字符串

在.net的内存数据库中