2015-10-04 73 views
0

我有以下的控制器:插入一個下拉列表值進路由值

public class StoreController : Controller 
{ 
    public ActionResult Index(string category, int? page) 
    { 
     //some code 
    } 
} 

和一個圖,該數據發佈到Index方法:

@using (Html.BeginForm("Index", "Store", new { category = Model.Category, page = 1})) 
{ 
    <input type = "submit" class="btn btn-default" value = "Search" /> 
    @:Choose category: &emsp; 
    @Html.DropDownListFor(model => model.Category, new[] 
    { 
     new SelectListItem{ Text = "All", Value = "All", Selected = true}, 
     new SelectListItem{ Text = "Cat1", Value = "Cat1"}, 
     new SelectListItem{ Text = "Cat2", Value = "Cat2"}, 
     new SelectListItem{ Text = "Cat3", Value = "Cat3"} 
    }) 
} 

問題是,路由值傳遞給Index方法顯然是錯誤的,因爲Model.Category是傳遞給視圖的Model的Category。我正嘗試使用下拉列表中的選定值進行路由。問題是我如何檢索它?

我知道我可以用jQuery Ajax做這一切,但我想先試試這種方式。是否有可能以簡單的方式做到這一點,或者我真的不得不修改GET請求嗎?

+0

使窗體'FormMethod.Get'和刪除'新{category = Model.Category}'。然後將所選下拉列表的值添加到路線值 –

+0

謝謝您的回覆。我想保持代碼小,所以我沒有包含完整的表單,但實際上它有我想要的其他值,所以GET是不可接受的。抱歉混淆。 – BartG

+0

還有多少其他值?如果它可能超過查詢字符串限制,那麼只需執行POST而不是GET。 –

回答

0

你的模型應該像

public class MyModel 
{ 
    public string Category {get; set;} 
    public int? page {get; set;} 
} 

使用此

public class StoreController : Controller 
{ 
    [HttpPost] 
    public ActionResult Index(MyModel model) 
    { 
     // process ur submit page with proper category 
    } 

    [HttpGet] 
    public ActionResult Index() 
    { 
     var model = new MyModel(); 
     model.Category = "All"; // the default category 
     return View(); 
    } 
} 

呈現下拉列表這樣

@Html.DropDownListFor(model => model.Category, new[] 
{ 
    new SelectListItem{ Text = "All", Value = "All" }, // YOU DO NOT NEED TO KEEP THIS SELECTED, MVC DOES AUTO SELECT BASED ON PROPERTY VALUE 
    new SelectListItem{ Text = "Cat1", Value = "Cat1"}, 
    new SelectListItem{ Text = "Cat2", Value = "Cat2"}, 
    new SelectListItem{ Text = "Cat3", Value = "Cat3"} 
}) 
+0

謝謝你的回覆。我想保持代碼小,所以我沒有包含所有的細節,但實際上我的模型有更多的值,我想要POST,並使用我的原始文章中提到的兩個值進行路由。所以我發佈了類別,頁面和其他5個值,但我希望我的路線如下所示: '/ Store/Index/Cat1/1' – BartG

相關問題