我正在学习 ASP.NET MVC 2,我想做的很简单:
- 我用产品类型列表填充下拉列表
- 当下拉值更改时,我发布到模型并传递所选值。
- 用该特定产品类型的产品列表填充集合
到目前为止,一切正常,但我的视图尚未更新,并且未显示特定产品类型的产品列表。
我在想也许是因为[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;
}
}
公共类产品 { 公共字符串类型 { 获取;放; } 公共字符串名称 { 获取;放; } }
看法:
<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);
}
}