控制器无法访问视图中的面板ID

时间:2017-07-21 18:04:48

标签: .net model-view-controller

我正在尝试将asp.net项目转换为MVC。尽管它在简单的asp.net上运行良好,但在MVC上我得到了一个错误。 这是一个简单的视图,其中有一个显示所有产品的面板。

asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <asp:Panel ID="PanelProducts" runat="server">
    </asp:Panel>
</asp:Content>

这里是它的控制器,

ProjectModel pm = new ProjectModel();
            List<Product> products = pm.getAllProducts();

            foreach (Product product in products)
            {

                Panel productPanel = new Panel();
                ImageButton imageButton = new ImageButton();
                Label lblName = new Label();
                Label lblPrice = new Label();

                imageButton.ImageUrl = "~/images/" + product.image;
                imageButton.CssClass = "productImage";
                imageButton.PostBackUrl = "Product.aspx?id=" + product.Id;

                lblName.Text = product.Name;
                lblName.CssClass = "productName";

                lblPrice.Text = "$" + product.Price;
                lblPrice.CssClass = "productPrice";

                productPanel.Controls.Add(imageButton);
                productPanel.Controls.Add(new Literal { Text = "<br />" });
                productPanel.Controls.Add(lblName);
                productPanel.Controls.Add(new Literal { Text = "<br />" });
                productPanel.Controls.Add(lblPrice);

                PanelProducts.Controls.Add(productPanel);

                return View();

我遇到的错误是控制器无法访问视图中的id = panelproducts。

1 个答案:

答案 0 :(得分:0)

创建局部视图(即_ProductList.cshtml)并从控制器执行“返回PartialView(”_ ProductList“,产品)。

在_ProductList.cshtml中,使用Razor语法,如下面的代码。 Webforms与MVC不同。 MVC的重点是UI / View与Controller的分离。您不能像在WebForms中那样继续编程,直接从控制器访问UI控件,因为这会破坏MVC的目的。

@model IEnumerable<Product>
<div id="PanelProducts">
    @foreach (var product in Model)
    {
        <a href="~/images/Product.aspx?id=@product.Id" class="productImage">
            <img src="~/images/@product.image" />
        </a>
        <br />
        <label class="productName">@product.Name</label>
        <br />
        <label class="productPrice">@product.Price.ToString("C2")</label>
    }
</div>