如何仅发布DropDownList中的选定值

本文关键字:何仅发 DropDownList | 更新日期: 2023-09-27 18:24:12

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

型号:

    // 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);

如何仅发布DropDownList中的选定值

我想我明白你的问题了。这本身并不是一个真正的问题。这是你的误解。

国籍列表不会返回到您的控制器。它们由构造函数在每次创建SearchCriteria对象时创建(包括模型绑定到post时)。客户端不会将其发布到服务器。

虽然这是正在做的额外工作,并不总是必要的,但这并不是一个真正的问题。实际公布的值应该在SearchCriteria对象的国籍成员中。

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

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

Nationalities不会返回,它们只是在创建SearchCriteria实例时填充。你可能会在Chrome的开发者控制台上看到服务器上的海报,或者在Firefox中看到firebug。

尝试NOTNationalities属性作为模型的实例成员。将Nationalities列表声明为其他类中的类中的static属性(例如,像助手类)。Nationalities列表是一个参考数据,它是实例模型的一部分(在设计方面)不是很清楚。