Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中存储多个Selection/Dropdownlist#_C#_Asp.net Mvc_Formcollection - Fatal编程技术网

C# 如何在C中存储多个Selection/Dropdownlist#

C# 如何在C中存储多个Selection/Dropdownlist#,c#,asp.net-mvc,formcollection,C#,Asp.net Mvc,Formcollection,我是MVC和C的新手,对于一个项目,我试图让用户从列表中选择多个城市,然后将其存储到DB中。我读了几篇关于这个的帖子,但不知道如何修复我的。我可以存储表单的所有其他项: @using ( Html.BeginForm( "AddProjectInfo", "Insert", FormMethod.Post, new { enctype = "multipart/form-data" @id = "insertform", @class = "form-horizo

我是MVC和C的新手,对于一个项目,我试图让用户从列表中选择多个城市,然后将其存储到DB中。我读了几篇关于这个的帖子,但不知道如何修复我的。我可以存储表单的所有其他项:

@using ( Html.BeginForm( "AddProjectInfo", "Insert", FormMethod.Post, new {
        enctype = "multipart/form-data"
        @id = "insertform", @class = "form-horizontal col-md-4 col-md-offset-4"
    } ) )
但对于城市,它只存储第一个选定的项目,而不是全部。你能帮我修一下吗

以下是我的看法:

<div class="form-group">
        <label class="col-sm-3 col-form-label text-left">City * </label>
        <div class="col-sm-9">
            @Html.DropDownList(
             "City",
             new SelectListItem[] {
                    new SelectListItem {
                        Text = "Cambridge", Value = "Ca"
                    },
                   new SelectListItem {
                        Text = "Oxford", Value = "Ox"
                    },
                    new SelectListItem {
                        Text = "Sheffield", Value = "Sh"
                    }                
             },
         "--Select Cities--",
    new {
        @class = "form-control",
        required = true,
        multiple = "multiple"
    }
        )
    </div>
</div>
我知道如何使用JavaScript实现这一点,但不知道C#如何处理这一点。 谢谢你

@Html.ListBoxFor(m=>m.location\u代码,Model.location\u类型)
 @Html.ListBoxFor(m => m.location_code, Model.location_type)        
    [HttpPost]
        public string SaveResults(List<int> location_code)
        {

            if (location_code!= null)
            {
                return string.Join(",", location_code);
            }
            else
            {
                return "No values are selected";
            }
        }
[HttpPost] 公共字符串保存结果(列表位置\u代码) { 如果(位置代码!=null) { 返回字符串。Join(“,”,位置\代码); } 其他的 { 返回“未选择任何值”; } }
我会预先告诉您,我编写这些示例时没有对其进行测试,但这只是为了让您大致了解如何正确使用下拉列表/列表框。另外,最后,我将留下我的GitHub的链接,在那里我有一个简单的项目,这是我前一段时间专门为这样的情况编写的

那么,让我们开始吧。为了简单起见,我宁愿在控制器中创建下拉列表。例如:

假设您有一个模型:

public class Person
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public string City { get; set; }

    [NotMapped]
    public SelectList CitySelectList { get; set; }
}
请注意
CitySelectList
,它是
NotMapped
,因为我们不希望它连接到数据库。
CitySelectList
的值将通过
City

然后你就有了一个行动方法:

public ActionResult Insert()
{
    var person = new Person { CitySelectList = new SelectList(
    new List<SelectListItem>
        {
            new SelectListItem { Text = "Cambridge", Value = "Ca" },
            new SelectListItem { Text = "Oxford", Value = "Ox" },
            new SelectListItem { Text = "Sheffield", Value = "Sh" }
        }, "Value", "Text") };

    return View(person);
}
正如你所见,我通过一个编辑器调用下拉列表来传递2个htmlAttributes。最重要的是
multiple=“multiple”
,因为这将定义我将在页面中显示的项目列表的类型。怎么用?通过专门为处理它而构建的编辑器模板。如果您不熟悉它的概念和用法,可以检查start。编辑器模板如下所示:

@model SelectList

@{
    var htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(ViewData["htmlAttributes"]);
}

@if (!htmlAttributes.ContainsKey("multiple"))
{
    @Html.DropDownListFor(m => m.SelectedValue, Model.SelectListItems, htmlAttributes)
}
else
{
    @Html.ListBoxFor(m => m.SelectedValues, Model.SelectListItems, htmlAttributes)
}
关于这个编辑器模板的一个细节:您是否注意到我正在为SelectedValue创建下拉列表/列表框?当您获取所有值时,这可能会引起一点头痛,但您可以在POST方法中通过以下方式处理:

[HttpPost]
public ActionResult Insert(Person person)
{
    person.City = person.CitySelectList.SelectedValues;
    // Some code goes here
    return View();
}

应该是这样。但是,正如我之前所说,我有一个工作代码,所以您可以运行并查看它是如何工作的。如果您需要,还可以从GitHub中对该代码进行一些解释。

public ActionResult Insert(FormCollection frm)这应该是一个真实的模型,具有与HTMLD中的输入相对应的字段,不要将
DropDownList()
多个
-使用
ListBoxFor()
(请参阅)。切勿使用
FormCollection
。创建视图模型并绑定到属性-请参阅典型实现使用
new SelectList(…)
从第一个视图创建第二个相同的
IEnumerable
是毫无意义的。这不提供客户端或服务器端验证,在编辑现有数据时不能用于正确的双向模型绑定,不会设置
城市
的值(
SelectedValues
IEnumerable
),在
返回视图()时将丢失所有选项IEnumerable SelectedCities
,而不是
selectedvalue
属性的
selectedlist
:)
@model SelectList

@{
    var htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(ViewData["htmlAttributes"]);
}

@if (!htmlAttributes.ContainsKey("multiple"))
{
    @Html.DropDownListFor(m => m.SelectedValue, Model.SelectListItems, htmlAttributes)
}
else
{
    @Html.ListBoxFor(m => m.SelectedValues, Model.SelectListItems, htmlAttributes)
}
[HttpPost]
public ActionResult Insert(Person person)
{
    person.City = person.CitySelectList.SelectedValues;
    // Some code goes here
    return View();
}