保存多选c#

时间:2018-02-14 07:39:47

标签: c# asp.net-mvc

我使用cshtml作为我的选择:

 <div class="form-group">
    <label class="control-label col-md-2" for="Ligne">Ligne</label>
    <div class="container">
        <select name="Ligne" id="ligne" class="selectpicker" title="Select something" data-live-search="true"  multiple="multiple">
            @foreach (var item in Model.allLignes)
            {
                <option value=@Html.DisplayFor(modelItem => item.CodeLigne)>@Html.DisplayFor(modelItem => item.CodeLigne)</option>

            }
        </select>
    </div>
</div>

但是当我发送表单时,它只保存一个值......

你能帮助我吗?

我的控制员:

   public ActionResult Create([Bind(Include = "Id,name,begin,end,Ligne")] RT TypeRT)

 cmdPerso.CommandText = "insert into RT (name, begin, end, Ligne, CreateBy) VALUES ('" + TypeRT.name+ "','" + TypeRT.begin+ "','" + TypeRT.end+ "','" + TypeRT.Ligne+ "','" + User.Identity.Name + "')";

我想将此选择表达式用于编辑表单。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

使用ASP MVC框架提供的工具:

  • 在ViewModel中,所选值绑定到的属性必须是数组。可用选项可以存储在MultiSelectList类中。

    using System.Web.Mvc;
    
    public class MultiSelectViewModel {
    
        /// <summary>
        /// Selected values of the multi select.
        /// </summary>
        public string[] SelectedValues { get; set; }
    
        /// <summary>
        /// Possible options.
        /// </summary>
        public MultiSelectList AvailableOptions { get; set; }
    }
    
  • 在您的控制器(GET案例)中,指定可用选项:

MultiSelectList可以通过传递一组选项以及包含选项的值和文本的属性的名称来实例化(例如&#34; CodeLigne&#34;)。

Ligne[] allLignes = DbContext.Lignes.ToArray(); // all possible options
// for edit use case: the options that have been selected during create use case
string[] previouslySelectedLigneCodes = new { "1", "3" }; 

// your ViewModel containing the multiselect properties
var vm = new MultiSelectViewModel(); 
vm.AvailableOptions = new MultiSelectList(
    allLignes, "CodeLigne", "NomLigne", previouslySelectedLigneCodes);
  • 在您的视图中,您可以使用ListBoxFor

    渲染MultiSelect
    @model MultiSelectViewModel 
    
    <label for="@Html.IdFor(m => m.SelectedValues)">Ligne</label>
    @Html.ListBoxFor(m => m.SelectedValues, Model.AvailableOptions, 
                          new {@class = "selectpicker", title ="Select something"})
    

进一步阅读:Step-By-Step Implementation of MultiSelectList In .NET MVC

答案 1 :(得分:0)

首先,将TypeRT.Ligne的类型更改为List<string>(如果需要,您可以将string更改为其他类型,例如List<int>)。

现在您的控制器将获取所选值的列表,但您的查询必须保存它们。理想情况下,此列表应保存在另一个表中,您应将每个值保存在单独的行中。这是一个很好的标准化设计。

但是,从您的代码中可以看出,您将列表保存在同一个表的单个字段中,也许以逗号分隔?这不是一个好的设计,它需要像我上面提到的那样进行规范化,但如果你真的想这样做,那么你必须使用你想要的分隔符加入数组项目:

String.Join(",", TypeRT.Ligne);

如果你正在使用.NET&lt; 4,你必须先使用ToArray

String.Join(",", TypeRT.Ligne.ToArray());

注意:您的查询容易受到SQL注入攻击。改为使用参数化查询。