MVC 2 - 基于下拉选择更新视图

本文关键字:选择 更新 新视图 于下拉 MVC | 更新日期: 2023-09-27 17:57:03

我正在学习MVC 2 ASP.NET,我想做的很简单:

  1. 我用产品类型列表填充一个下拉列表
  2. 当下拉值更改时,我发布到模型并传递所选值。
  3. 使用该特定产品类型的产品列表填充产品系列

到目前为止,一切正常,但我的视图没有更新,并且没有显示特定产品类型的产品列表。

我在想也许是因为[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);
    }
}

MVC 2 - 基于下拉选择更新视图

看起来您没有对控制器在帖子后返回的 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>