我在MVC应用程序中玩游戏并试图弄清楚看起来非常简单的事情。
我的Index.cshtml
文件夹中有一个Views/Home/
文件非常简单(下方)
索引视图
...
<div>
Search
@Html.DropDownList("selection", MyProject.Util.Lists.GetMyList(), "Select One")
@Html.ActionLink("Search", "Index", "Search", new { st = xxx }, null)
</div>
...
我还有一个搜索控制器需要采取&#34; st&#34;价值,看起来像这样
public class SearchController : Controller
{
// GET: Search
public ActionResult Index(string st)
{
ApplicationDbContext db = new ApplicationDbContext();
List<Report> filteredReports = db.Reports.Where(r => r.Tag == st).ToList();
return View(filteredReports);
}
}
我不确定如何从下拉列表中选择从中选择的值,并将其添加到我刚才拥有的Html.ActionLink
&x; xxx&#39;现在
答案 0 :(得分:0)
单击该链接通常会对链接的href属性值执行新的GET请求。它不会从您的表单中发送任何数据。
你需要使用javascript并劫持链接上的click事件,并将SELECT元素中选定的选项值作为查询字符串附加到该元素并发送它。
所以给链接一个id,你可以在以后用它来点击click事件
dbpath
和javascript
@Html.ActionLink("Search", "Index", "Search", null, new {@id="search"})
另一种选择是使用表单提交。将select元素包装在表单中,并有一个submt按钮,将表单发送到action方法。此方法不需要javascript。但您的选择输入元素名称应与您的参数名称相匹配。
$(function(){
$("#search").click(function(e){
e.preventDefault();
window.location.href=$(this).attr("href")+"?st="+$("#selection").val();
});
});
如果您不喜欢按钮,但需要link元素,则可以使用javascript提交表单(就像我们在第一种方法中所做的那样)。使用此方法,您无需手动附加查询字符串。
答案 1 :(得分:0)
你必须调用一个存储所选值的控制器的AJAX POST调用,然后当你的动作链接事件触发从那里获得存储值时。
<强> AJAX:强>
$.ajax(
{
url:your url,
data:{"st":dropdown selected value},
type:"post"
});
<强>控制器:强>
public ActionResult Index()
{
string st=TempData["st"].ToString();
ApplicationDbContext db = new ApplicationDbContext();
List<Report> filteredReports = db.Reports.Where(r => r.Tag == st).ToList();
return View(filteredReports);
}
public void SetSt(string st)
{
TempData["st"] = st;
}