MVC 2 - 基于下拉选择更新视图
本文关键字:选择 更新 新视图 于下拉 MVC | 更新日期: 2023-09-27 17:57:03
我正在学习MVC 2 ASP.NET,我想做的很简单:
- 我用产品类型列表填充一个下拉列表
- 当下拉值更改时,我发布到模型并传递所选值。
- 使用该特定产品类型的产品列表填充产品系列
到目前为止,一切正常,但我的视图没有更新,并且没有显示特定产品类型的产品列表。
我在想也许是因为[HTTPPost]
只是发布到视图模型,而它实际上并没有更新视图?
关于如何根据下拉选择更新视图的任何建议?
型:
公共类供应商模型{ 公共供应商模型() { }
public SuppliersModel(string type)
{
ProductsByType = Products.Where(i => i.Type == type);
}
public IEnumerable<Products> ProductsByType { get; set; }
public List<Products> Products
{
get
{
List<Products> mockProducts = new List<Products>()
{
new Products{Type="Fruit", Name="Apple"},
new Products{Type="Fruit", Name="Orange"},
new Products{Type="Vegetables", Name="Potato"},
new Products{Type="Vegetables", Name="Carrot"}
};
return mockProducts;
}
}
public SelectList ProductTypes
{
get { return GetProductTypes(); }
}
private SelectList GetProductTypes()
{
var productTypes = new List<SelectListItem>
{
new SelectListItem{ Value="Fruit",Text="Fruit"},
new SelectListItem{ Value="Vegetables",Text="Vegetables"}
};
var list = new SelectList(productTypes, "Value", "Text");
return list;
}
}
公共类产品{ 公共字符串类型 { get; set; } 公共字符串名称 { get; set; }}
视图:
<script type="text/javascript">
$(function () {
$('#products').change(function () {
$.post('<%=Url.Action("GetProductsByType", "Suppliers")%>', { type: $(this).val() },
function (result) {
});
});
});
</script>
<h2>
Suppliers</h2>
<%= Html.DropDownList("products",Model.ProductTypes) %>
<table>
<% if (Model.ProductsByType != null) foreach (var item in Model.ProductsByType)
{ %>
<tr>
<td>
<%= item.Name %>
</td>
<td>
<%= item.Type %>
</td>
</tr>
<% } %>
</table>
控制器:
public class SuppliersController : Controller
{
public ActionResult Suppliers()
{
SuppliersModel model = new SuppliersModel();
return View(model);
}
[HttpPost]
public ActionResult GetProductsByType(string type)
{
//This executes when the value in the drop down changes
SuppliersModel model = new SuppliersModel(type);
return View(model);
}
}
看起来您没有对控制器在帖子后返回的 html 执行任何操作,
<script type="text/javascript">
$(function () {
$('#products').change(function () {
$.post('<%=Url.Action("GetProductsByType", "Suppliers")%>', { type: $(this).val() },
function (result) {
//result will have the html that your controller returns after the post
// you can do something like,
$('#some-div').html(result);
});
});
});
</script>