我对.Net C#很新,我真的不知道我做错了什么。我有一个LinqToSql DataContext我正在绘制不同的结果,但我不确定如何在我的视图中正确输出结果。我在视图中收到编译错误(Compiler Error Message: CS1002: ; expected)
。
StoreRepository.cs
public IQueryable<String> GetStoreStates()
{
return from Store in db.Stores
orderby Store.State
select Convert.ToString(Store.State.Distinct());
}
StoresController.cs
public ActionResult StatesIndex()
{
var states = repo.GetStoreStates().ToList();
return View("StatesIndex", states);
}
StatesIndex.aspx
<ul>
<% foreach (var state in Model)
{ %>
<li>
<% Html.Encode(state) %>
</li>
<% } %>
</ul>
答案 0 :(得分:2)
你错过了一个等号:
<% Html.Encode(Store.state) %>
应该是
<% =Html.Encode(Store.state) %>
提供更多解释。如果您正在调用其中一个Html
扩展方法,则需要在其前面加上等号=
或冒号:
,因为这些方法会输出要显示的相应HTML字符串。当你这样做时,你不用分号附加你的陈述。
如果您正在调用一个不直接返回HTML字符串的方法,那么您就像普通的C#方法一样调用它,在这种情况下,您将需要分号。
当你第一次开始使用MVC时,记住何时使用equals以及何时使用分号可能会让你感到沮丧。
答案 1 :(得分:1)
您的View模型是字符串的集合,而不是商店对象。 所以当你做的时候
foreach(var Store in Model)
每个Store
只是一个字符串而您无法Store.state
更改GetStoreStates
方法以返回商店对象列表或将foreach的内容更改为
<%= Html.Encode(Store) %>
编辑:评论后更新。
问题是您正在尝试对字符串执行Distinct()。如果它有效,它只会让你得到一个包含不同字符的字符串。
它认为这更符合您的要求:
public IQueryable<String> GetStoreStates()
{
return (from Store in db.Stores
orderby Store.State
select Store.State).Distinct();
}
这将在状态列表上而不是在每个状态字符串上执行Distinct()。
答案 2 :(得分:0)
您需要repo.GetStoreStates().ToList()
。没有它,你试图传递一个IQueryable
作为你的模型,这本质上是一个尚未运行的查询。要运行查询,您需要调用ToList()
,这将导致查询运行并返回List<type>
,然后您可以循环查看。