0

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

模型:

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

3 回答 3

4

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

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

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

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

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

于 2013-07-21T17:19:33.580 回答
2

Nationalities没有回发,它们只是在SearchCriteria实例创建时填充。您可能会在 Chrome 的开发者控制台或 Firefox 中的萤火虫中看到发布到服务器的内容。

于 2013-07-21T17:18:55.103 回答
-1

尽量不要将您的Nationalities属性作为模型的实例成员。Nationalities将列表声明为static您的类中的一个属性,在另一个类中(例如帮助类)。该Nationalities列表是一个参考数据,它不是很干净(在设计方面)它是实例模型的一部分。

于 2013-07-21T17:11:39.847 回答