2013-12-11 60 views
0

Hy,通過響應傳遞選擇到控制器

我是ASP.NET MVC 5的新手。我嘗試獲取HTML select的值,但沒有成功。

我的視圖(主要部分):

<div class="form-group"> 
    @Html.Label("Country", new { @class = "col-md-2 control-label" }) 
    <div class="col-md-10"> 
     @Html.DropDownList("Countries", (IEnumerable<SelectListItem>)ViewBag.Countries, new { @class = "form-control", id = "Country", name = "Country" }) 
    </div> 
</div> 

我控制器(基本部分):

public ActionResult Index() 
{ 
    string country = Request["Country"]; // here I always get null 
} 

我需要一個像解釋一個新手爲什麼這不工作,我如何得到它的工作,請:)

+0

停止使用ViewBag,創建一個視圖模型來表示您的數據。讓發佈操作獲取視圖模型的實例。 – Maess

+0

@Maess爲什麼和我是如何做到的? –

回答

2

首先,我同意@Maess。請勿使用ViewBag。這太可怕了,微軟的某個人應該被封爲永遠不會添加它作爲一個選項。

這就是說,你的錯誤在這裏很明顯。您將您的選擇命名爲「國家/地區」,並且您試圖將「國家/地區」拉出請求。

既然你是新的,我會很好,並展示如何使用視圖模型。首先,創建一個模型:

public class IndexViewModel 
{ 
    public int SelectedCountry { get; set; } 
    public IEnumerable<SelectListItem> CountryChoices { get; set; } 
} 

然後在動作:

// GET 
public ActionResult Index() 
{ 
    var model = new IndexViewModel(); 

    // get your country list somehow 

    // where `Id` and `Name` are properties on your country instance. 
    model.CountryChoices = countries.Select(m => new SelectListItem { Value = m.Id, Text = m.Name }); 

    return View(model); 
} 

而在你的看法:

@model Namespace.IndexViewModel 

... 

@Html.DropDownListFor(m => m.SelectedCountry, Model.CountryChoices, new { @class = "form-control" }) 

最後,在你的POST操作:

[HttpPost] 
public ActionResult Index(IndexViewModel model) 
{ 
    // use model.SelectedCountry 
} 
+0

謝謝..我已經看到了^^ –

+0

非常感謝很好的explenation :) –

相關問題