如何仅发布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);
我想我明白你的问题了。这本身并不是一个真正的问题。这是你的误解。
国籍列表不会返回到您的控制器。它们由构造函数在每次创建SearchCriteria
对象时创建(包括模型绑定到post时)。客户端不会将其发布到服务器。
虽然这是正在做的额外工作,并不总是必要的,但这并不是一个真正的问题。实际公布的值应该在SearchCriteria
对象的国籍成员中。
如果不希望每次都创建Nations对象,则需要将其移动到辅助类中,并在需要填充此数据时调用它,或者将其完全移出类并在控制器中执行。也许更好的选择是将这些数据移动到数据库中。
顺便说一句,您可能希望删除第一项,并将其作为默认文本,这是DropDownList/DropDownListFor对象的一个参数。
Nationalities
不会返回,它们只是在创建SearchCriteria
实例时填充。你可能会在Chrome的开发者控制台上看到服务器上的海报,或者在Firefox中看到firebug。
尝试NOT将Nationalities
属性作为模型的实例成员。将Nationalities
列表声明为其他类中的类中的static
属性(例如,像助手类)。Nationalities
列表是一个参考数据,它是实例模型的一部分(在设计方面)不是很清楚。