我正在尝试将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。
答案 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>