0

我有下拉菜单,点击一个按钮,我想在用户控件中显示数据,下面的代码没有按预期工作。

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <%
        using (Html.BeginForm())
        {%>
    <%=Html.DropDownList("CarMake", (SelectList)ViewData["CarMake"])%>
    <input type="submit" value="Get all car model" />
    <%
         Html.RenderPartial("CarModel");
        } %>
</asp:Content>

// 在控制器中

 public ActionResult Test1()
        {
            ViewData["CarMake"] = new SelectList(_carDataContext.Makes.Select(m => new { ID = m.Id, Name = m.Name }), "ID", "Name");
            return View();
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Test1(int carMake)
        {
            ViewData["CarMake"] = new SelectList(_carDataContext.Makes.Select(m => new { ID = m.Id, Name = m.Name }), "ID", "Name");
            var carModel = _carDataContext.Models.Where(m => m.MakeId == carMake).ToList();
            return PartialView("CarModel", carModel);
        }
4

1 回答 1

1

由于您正在发布表单的完整帖子,因此您不想返回部分视图。您想将 ViewData["CarModel"] 设置为正确的模型,然后重新渲染相同的视图。视图中的 RenderPartial 将使用它在代码中“包含”正确的局部视图。

请注意,如果您通过 AJAX 发布,这将有所不同。此时,您将设置它以替换页面的特定元素,并且您只想渲染进入该元素的部分。

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Test1(int carMake)
    {
        ViewData["CarMake"] = new SelectList(_carDataContext.Makes.Select(m => new { ID = m.Id, Name = m.Name }), "ID", "Name");
        ViewData["CarModel"] = _carDataContext.Models.Where(m => m.MakeId == carMake).ToList();
        return View();
    }
于 2009-06-17T12:56:30.337 回答