2015-04-17 54 views
1

所以我創建了一個下拉列表,我根據列表中選定的值更改了語言,但是當它提交時,我鬆開了選定的值並重置。有什麼方法可以記住我提交時選擇的內容嗎?MVC html.dropdownlist僞裝選定的值?

@using (Html.BeginForm("SetCulture", "Home", new { @onsubmit = @"$(#Languages option:selected).text();" })) 
@Html.DropDownList("Languages", Test.Configuration.GetLanguages().Select(x => new SelectListItem() { Text = x.Text, Value = x.Value }), new{@onchange = @"$(form).submit();"}) 
+0

您的模型是否包含名爲'Languages'的屬性? –

+0

而不是'Html.DropDownList'使用強類型'Html.DropDownListFor' –

回答

0

你應該使用語法

@Html.DropDownListFor(model => model.Language, new SelectList(Test.Configuration.GetLanguages().Select(x => new SelectListItem() { Text = x.Text, Value = x.Value }))) 

然後MVC知道使用該字段來存儲從下拉列表中選擇的選項。

每下面的評論,我這是怎麼會在模型聲明語言:

PageViewModel.cs

public class PageViewModel { 
    ... 
    public string Language { get; set; } 
    public SelectList Languages { get; set; } 
} 

HomeController.cs

public ActionResult Index(PageViewModel pageViewModel) 
    { 
     //put breakpoint on the return view and after you submit a selection you'll see that the pageViewModel argument has the language of what you selected 
     return View(new PageViewModel 
      { 
       Language = "English", 
       Languages = new SelectList(new List<string> 
       { 
        "English", 
        "Danish", 
        "Spanish", 
        "French" 
       }) 
      }); 
    } 

Index.cshtml

@model MvcPlayground.Controllers.PageViewModel 
<h2>Languages!</h2> 

@using (Html.BeginForm()) 
{ 
    @Html.DropDownListFor(model => model.Language, Model.Languages) 
    <input type="submit"/> 
} 

MVC將使用語言屬性來確定回發中的選定項目,只要您正確傳遞它即可。

+0

即時通訊從配置文件獲取我的語言,我有我的模型中的語言列表,但它是'IEnumerable GetLanguages()'這是一個問題?我想我可以用這個工作? – AlCode

+0

如果你在談論model.Language,model.Language應該是你選擇列表項目的'selected value'(我假設語言被存儲爲字符串,所以它也是一個字符串)。 MVC將.ToString()這些項目的值確定選擇哪個選項。 –

+0

讓我檢查一下.. – AlCode

0

你可以改變你這樣的代碼

public ActionResult Index() 
    { 
     //pass the Enumerable<SelectListItem> in to viewbag 
     ViewBag.Countrys = new List<SelectListItem>{ 
       new SelectListItem { Selected = true, Text = "-Select-", Value = "-1"}, 
       new SelectListItem { Text = "India", Value = "100"}, 
        new SelectListItem { Text = "US", Value = "101"}, 

      }; 


     return View(); 
    } 

,你需要這樣的

public class HomeModel 
{ 
    public string FirstName { get; set; } 

    public int CountryId { get; set; } 
} 

模型然後在視圖

 @model Stratergy.Models.Home.HomeModel 

@using (@Html.BeginForm("YourAction", "your controller")) 
{ 
    <fieldset> 
    <legend>Personal Form:</legend> 

    @Html.TextBoxFor(model=>model.FirstName) 
    @Html.DropDownListFor(model=>model.CountryId,(IEnumerable<SelectListItem>)@ViewBag.Countrys) 

    <input type="submit" value="Finish" /> 
    </fieldset> 
} 

,你可以得到在所選擇的值模特什麼時候上崗

[HttpPost] 
    public ActionResult YourAction(HomeModel homeModel) 
    { 

     return Json(new { Result = "OK"}); 
    } 
+0

爲上帝的愛,這是我的模型'@model Models.IndexPageModel' 爲什麼我不能說model => model.Language,只是Model.Language?我不明白嗎? – AlCode

相關問題