我指的是其中一个示例,在它的aspx页面上,这段代码写的是:
<% foreach (KandaAlpha.Domain.Model.Entities.Customer customer in (List<KandaAlpha.Domain.Model.Entities.Customer>)(ViewData["Customers"]))
{ %>
<tr>
<td>
<%= customer.CustomerID%>
</td>
<td>
<%=customer.FullName%>
</td>
<td>
<%=customer.LastUpdatedOn.ToString()%>
</td>
</tr>
<% } %>
如何将KandaAlpha.Domain.Model.Entities.Customer
写入客户?我应该在哪里编写import namespace代码?
提前致谢:)
答案 0 :(得分:4)
在视图的开头使用<%@ Import
语句:
<%@ Import Namespace="KandaAlpha.Domain.Model.Entities" %>
或者通过将名称空间添加到web.config的<namespaces>
部分,在这种情况下,它将是所有视图的全局:
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="KandaAlpha.Domain.Model.Entities"/>
</namespaces>
</pages>
或者我推荐你的最佳方法是摆脱ViewData并使用视图模型和显示模板。在这种情况下,您的整个foreach
循环将消失,并将替换为以下一个衬垫:
<table>
<%= Html.DisplayFor(x => x.Customers) %>
</table>
然后在相应的显示模板(~/Views/Shared/DisplayTemplates/Customer.ascx
)内定义客户的模板,该模板将为视图模型的Customers
集合的每个元素呈现:
<%@ Control
Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<Customer>"
%>
<tr>
<td><%= Html.DisplayFor(x => x.CustomerID) %></td>
<td><%= Html.DisplayFor(x => x.FullName) %></td>
<td><%= Html.DisplayFor(x => x.LastUpdatedOn) %></td>
</tr>
另请注意Html.DisplayFor
的使用情况,因为如果您的客户FullName为<script>alert('I hacked you');</script>
,您可能会遇到麻烦,因为您没有对其进行HTML编码。
正如您所看到的,一旦我们摆脱ViewData
并开始使用视图模型,我总是建议我们的视图变得非常简单和可读。
答案 1 :(得分:0)
<%@ Page Title="" Language="C#" MasterPageFile="~/Themes/Whatever/Site.Master" Inherits="System.Web.Mvc.ViewPage<Whatever.ViewModels.MyViewModel>" %>
<%@ Import Namespace="KandaAlpha.Domain.Model.Entities" %>
<%= //content %>