[英]How do I instantly get updated value of dropdown box selected item in C# MVC?
我有一个基于用户选择需要过滤的“实践”列表。 我的视图有一个下拉列表,如下所示:
@Html.DropDownList("practice", (List<SelectListItem>)ViewBag.PracticeList)
它允许用户从6种左右的方法中选择一种来过滤另一个列表。 我需要检索值并更新页面。 我在页面上填充了默认值,而无需考虑实践过滤器,我只是无法更新它,因为我似乎无法检索到该值。 我只需要获取此值,即可将其合并到循环中以重建列表。
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.User.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.User.LastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.User.Email)
</td>
<td>
@Html.TextBox("Hours")
</td>
</tr>
}
首先使用jquery捕获select中的更改:
$('#selectList').on('change', function() {
})
然后,ajax到一个控制器,该控制器将返回您的其他项目:
$.ajax({
url: '@Url.Action("Action","Controller")',
data: { 'selection' : $(this).val() },
type: "post",
cache: false,
success: function (items) {
//update the other select
};
});
使用剃刀:
@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions {UpdateTargetId = "DivToUpdate"}))
{
@Html.DropDownList("practice", (List<SelectListItem>)ViewBag.PracticeList, new { onchange="this.form.submit()"})
}
然后,您可以从控制器返回该下拉列表,或者但是要处理该列表。
编辑
实际上,我认为您不能像嵌套表单那样使用Ajax.BeginForm方法。 您可能会陷入jQuery
您还可以使用@ Ajax.BeginForm并在控制器的操作中返回部分视图,并将其呈现在ajax表单的成功处理程序的客户端上。
这是@ Ajax.BeginForm上的帖子
但是您将必须具有一个jquery脚本,该脚本会在您的select change事件上提交表单。
您可以像这样使用AjaxBeginFormfor:
@model YourModel
@using (Ajax.BeginForm("Action", "Controller", null,
new AjaxOptions { HttpMethod = "POST",
OnSuccess = "functionIfYouWant(data)",
UpdateTargetId = "divid",
InsertionMode=InsertionMode.InsertAfter},
new { id = "formId" }))
{
@Html.DropDownListFor(c=>c.SelectedVal, (List<SelectListItem>)ViewBag.PracticeList)
<div id="divId">
</div>
<input type="submit" value="Submit"/>
//or add @Html.DropDownListFor(c=>c.SelectedVal, // List<SelectListItem>)ViewBag.PracticeList,new {onChange="jQuery("#formId").submit()"})
}
现在,您可以将模型发布到控制器,并且返回的内容将追加到具有id =“ divId”的div内容中,希望您理解我要解释的内容。 另外请尽量避免在应用中使用ViewBag不是一个好习惯。请尝试在模型中使用SelectlistItem来填充下拉列表。 因此,假设您有自己的模型:
public class Model
{
public int SelectedItem{get;set;}
public IList<DropDownObj> ListObj{get;set;
public IList<SelectListItem> SelectListItemListObj{get;set;}
{
get
{
var list = (from item in ListObj
select new SelectListItem()
{
Text = item.Id.ToString(CultureInfo.InvariantCulture),
Value item.Name
}).ToList();
return list;
}
set{}
}
}
public class DropDownObj
{
public int Id{get;set;}
public string Name{get;set;
}
在控制器中,您需要设置(从db或从某处填充)您的DropDownObj列表。 并且鉴于您将能够执行以下操作:
@Html.DropDownListFor(c=>c.SelectedItem,Model.SelectListItemListObj)
这就是mvc dropdownlsit在mvc中的外观。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.