C# 如何仅发布DropDownList中的选定值?

C# 如何仅发布DropDownList中的选定值?,c#,asp.net-mvc,C#,Asp.net Mvc,在下面的设置中,所有国籍都会发布回服务器,我真的不关心整个列表,只关心所选的值。如何修改代码,以便只将选定的国籍与模型的其余部分一起发回 型号: // SearchCriteria model public class SearchCriteria() { public SearchCriteria() { Nationalities = new List<SelectListItem>(); Nationalities.Add

在下面的设置中,所有国籍都会发布回服务器,我真的不关心整个列表,只关心所选的值。如何修改代码,以便只将选定的国籍与模型的其余部分一起发回

型号:

    // SearchCriteria model
public class SearchCriteria()
{
    public SearchCriteria()
    {
        Nationalities = new List<SelectListItem>();
        Nationalities.Add(new SelectListItem { Text = "Any Nationality", Value = "Any Nationality", Selected = true });
        Nationalities.Add(new SelectListItem { Text = "United States", Value = "United States", Selected = false });
        Nationalities.Add(new SelectListItem { Text = "Japanese", Value = "Japanese", Selected = false });
        Nationalities.Add(new SelectListItem { Text = "Mexican", Value = "Mexican", Selected = false });
        Nationalities.Add(new SelectListItem { Text = "Canadidan", Value = "Canadidan", Selected = false });
        Nationalities.Add(new SelectListItem { Text = "Chinese", Value = "Chinese", Selected = false });
    }
    public string Name {get;set;}
    public string Nationality { get; set; }
    public List<SelectListItem> Nationalities { get; set; }
}
    [HttpPost]
    public ActionResult Find(SearchCriteria model)
    {                               
        try
        {
            // find it
            return View(model);
        }
        catch
        {
            return View(model);
        }
    }
@Html.Label("Name:");
@Html.TextBoxFor(model => model.Name);
@Html.Label("Nationality:");
@Html.DropDownListFor(model => model.Nationality, Model.Nationalities);
查看:

    // SearchCriteria model
public class SearchCriteria()
{
    public SearchCriteria()
    {
        Nationalities = new List<SelectListItem>();
        Nationalities.Add(new SelectListItem { Text = "Any Nationality", Value = "Any Nationality", Selected = true });
        Nationalities.Add(new SelectListItem { Text = "United States", Value = "United States", Selected = false });
        Nationalities.Add(new SelectListItem { Text = "Japanese", Value = "Japanese", Selected = false });
        Nationalities.Add(new SelectListItem { Text = "Mexican", Value = "Mexican", Selected = false });
        Nationalities.Add(new SelectListItem { Text = "Canadidan", Value = "Canadidan", Selected = false });
        Nationalities.Add(new SelectListItem { Text = "Chinese", Value = "Chinese", Selected = false });
    }
    public string Name {get;set;}
    public string Nationality { get; set; }
    public List<SelectListItem> Nationalities { get; set; }
}
    [HttpPost]
    public ActionResult Find(SearchCriteria model)
    {                               
        try
        {
            // find it
            return View(model);
        }
        catch
        {
            return View(model);
        }
    }
@Html.Label("Name:");
@Html.TextBoxFor(model => model.Name);
@Html.Label("Nationality:");
@Html.DropDownListFor(model => model.Nationality, Model.Nationalities);

尝试
国籍
属性作为模型的实例成员。将
国籍
列表声明为另一个类(例如帮助器类)上的类中的
静态
属性。
国籍
列表是一个参考数据,它不是很清楚(在设计术语中)它是实例模型的一部分。

尝试
国籍
属性作为模型的实例成员。将
国籍
列表声明为另一个类(例如帮助器类)上的类中的
静态
属性。
国籍
列表是一个参考数据,它不是很清楚(在设计术语中)它是实例模型的一部分。

国籍
没有发回,它们只是在
搜索条件
实例创建中填充。您可能会在Chrome的开发者控制台或Firefox中看到正在向服务器发布的内容。

国籍
不会发回,它们只是在
搜索条件
实例创建中填充。你可以在Chrome的开发者控制台或Firefox的firebug中看到服务器上正在张贴的内容。

我想我看到了你的问题。这本身并不是一个问题。这是你的误解

国籍列表不会发回控制器。每次创建
SearchCriteria
对象时(包括模型绑定到post时),构造函数都会创建它们。这不是由客户机发布到服务器的

虽然这是额外的工作,但并不总是必要的,这并不是一个真正的问题。实际发布的值应位于
搜索条件
对象的国籍成员中

如果不希望每次都创建Nations对象,则需要将其移动到帮助器类并在需要填充此数据时调用它,或者将其完全移出类并在控制器中执行。也许更好的选择是将这些数据移动到数据库中


顺便说一下,您可能希望删除第一项,并将其改为默认文本,这是DropDownList/DropDownListFor对象的一个参数。

我想我看到了您的问题。这本身并不是一个问题。这是你的误解

国籍列表不会发回控制器。每次创建
SearchCriteria
对象时(包括模型绑定到post时),构造函数都会创建它们。这不是由客户机发布到服务器的

虽然这是额外的工作,但并不总是必要的,这并不是一个真正的问题。实际发布的值应位于
搜索条件
对象的国籍成员中

如果不希望每次都创建Nations对象,则需要将其移动到帮助器类并在需要填充此数据时调用它,或者将其完全移出类并在控制器中执行。也许更好的选择是将这些数据移动到数据库中


顺便说一下,您可能希望删除第一项,并将其改为默认文本,这是DropDownList/DropDownListFor对象的一个参数。

您可以发布填充国籍列表的代码吗?它应该可以与您的代码配合使用。过账价值应在国籍属性中。你查过了吗?我想你弄错了。不可能把所有国籍的人都张贴出来。这就是HTTP的工作原理,而不是下拉列表的工作原理。获取所有值的唯一方法是使用多选列表并选择所有项,而您没有这样做。@Meryovi-yah,但我不希望它也发送所有值。。。它没有性能。您可以发布填充您的国籍列表的代码吗?它应该可以与您的代码配合使用。过账价值应在国籍属性中。你查过了吗?我想你弄错了。不可能把所有国籍的人都张贴出来。这就是HTTP的工作原理,而不是下拉列表的工作原理。获取所有值的唯一方法是使用多选列表并选择所有项,而您没有这样做。@Meryovi-yah,但我不希望它也发送所有值。。。它没有性能。