簡體   English   中英

如何僅發布DropDownList中的選定值?

[英]How to post only the selected value from a DropDownList?

通過以下設置,所有國籍都將發布回服務器,我真的不在乎整個列表,僅在乎所選值。 如何修改我的代碼,以便僅將選定的國籍與模型的其余部分一起回發?

模型:

    // 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對象時(包括在模型上綁定模型時),構造函數都會創建它們。 客戶端未將其發布到服務器。

盡管這是多余的工作,並非總是必要的,但這並不是真正的問題。 實際過帳的值應該在SearchCriteria對象的Nationality成員中。

如果不想每次都創建“國籍”對象,則需要將其移到幫助器類中,並在要填充此數據時調用它,或者將其完全移出類並在控制器中進行操作。 也許更好的選擇是將這些數據移動到數據庫中。

順便說一句,您可能希望刪除該第一項並將其設置為默認文本,這是DropDownList / DropDownListFor對象的參數。

Nationalities不會回發,而只是在SearchCriteria實例創建時填充。 您可能會在Chrome開發者控制台中看到服務器的海報,或者在Firefox中看到螢火蟲。

盡量不要將您的Nationalities屬性作為模型的實例成員。 在其他班級(例如,例如助手班)上,將“ Nationalities列表聲明為您班級的static屬性。 Nationalities列表是參考數據,它不是實例模型的一部分(按設計術語)不是很干凈。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM