2014-10-17 80 views
1

我在视图和按钮中有一个下拉列表。现在当我点击按钮时,它会根据下拉列表值的值加载数据。过滤工作并完美显示页面,但下拉列表值不断重新设置。我想要它检索最后选择的值。MVC C#在页面加载中将selecteditem检索到下拉列表中

这是我与网页AllDates.cshtml视图和按钮将筛选并重新回到同一页:

@{ 

ViewBag.Title = "All Cars"; 

} 

<form name="filter" action="~/Home/AllDates" method="post" > 
<select id="fly" name='fly' > 
<option value='Any'>Any</option> 
<option value='plane'>plane</option> 
<option value='kyte'>kyte</option> 
</select> 
<input id="Refine" type="Submit" value="Refine" /> 

这里是我的控制器。我被告知使用Request调用控件不是一个好选择,但我是MVC的新手,它似乎很难。

public ViewResult AllDates() { 

        Session["fly"] = Request["fly"]; 



      var allDates = MyObjectToPreview; 

      return View(allDates); 
     } 

这是伟大的工作,但现在我怎么目的是让会话[“飞”]被检索到,一旦视图负载的下拉选择的项目?

回答

4

首先,您不需要将其保存到Session。这是一个不必要的步骤,不会为你买东西。其次,你正在手动定义你的select,这意味着Razor没有机会做任何事情来设置选定的值。如果您手动构建select,那么你也负责手动设置选择的值,例如:

<select id="fly" name="fly"> 
    <option value="Any" @(Request["fly"] == "Any" ? "selected" : string.Empty)>Any</option> 
    ... 
</select> 

更好的方法是让剃须刀手柄,适合你的选择列表:

@Html.DropDownList("fly", new List<SelectListItem> 
{ 
    new SelectListItem { Text = "Any", Value = "Any" }, 
    ... 
}) 

由于Razor参与构建HTML,现在,它可以根据Request["fly"]的值正确选择正确的选项。

+0

这是一个很好的答案(第一个选项)。你怎么能在foreach循环中使用这个逻辑? “([SomeData”] 如表 { } @foreach VAR在ViewData的项目 “)” – MohammedT 2014-10-20 18:58:49

+0

对上述评论的任何答案,请>此外,我想知道是否有与第一个选项类似的方法,但对于普通的aspx(它不支持“@”,而是<%%>。 – MohammedT 2014-10-23 20:40:49

2

您可以从ViewBag并获得ViewBag在视图中使用,如:

public ViewResult AllDates() { 
    ViewBag.FlyVal = Request["fly"]; 
... 
} 

,并鉴于在使用的document.ready:

<script> 
$(document).ready(function() { 

$("#fly").val('@ViewBag.FlyVal'); 

}); 
</script> 

另一种方法是使用Ajax请求添加过滤器

[HttpPost] 
public ActionResult AllDates(string filter) { 
    ViewBag.FlyVal = Request["fly"]; 
... 
return json(); 
} 

//Client 
$.ajax({ 
type: "POST", 
url: 'Action URL', 
contentType: "application/json; charset=utf-8", 
data: {filter : $("#fly").val()}, 
dataType: "json", 
success: function(result) { 
alert(result);   
} 
}); 
0

您可以使用viewdata也:

public ActionResult Viewresult() 
{ 
    ViewData["flyval"] = request["fly"]; 
    return View(); 
} 

鉴于:

@ViewData["Flyval"] 
相关问题