C# 无法让两行代码一起工作
大家好,我的控制器中有以下代码:C# 无法让两行代码一起工作,c#,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-2,asp.net-mvc-3-areas,C#,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 2,Asp.net Mvc 3 Areas,大家好,我的控制器中有以下代码: public ViewResult Index(string Ordering, int? CounterForPage) { var FullDatabaseItem = from b in db.tblGames select b; { var Info = db.tblGames.Inc
public ViewResult Index(string Ordering, int? CounterForPage)
{
var FullDatabaseItem = from b in db.tblGames
select b;
{
var Info = db.tblGames.Include(x => x.tblConsole).Where(UserInfo => UserInfo.UserName.Equals(User.Identity.Name)).ToList();
return View(Info);
}
switch (Ordering)
{
case "HeadlineName":
FullDatabaseItem = FullDatabaseItem.OrderBy(b => b.GameName);
break;
case "DatePosted":
FullDatabaseItem = FullDatabaseItem.OrderBy(b => b.ReleaseYear);
break;
case "DiscriptionDate":
FullDatabaseItem = FullDatabaseItem.OrderBy(b => b.ReleaseYear);
break;
default:
FullDatabaseItem = FullDatabaseItem.OrderByDescending(b => b.ReleaseYear);
break;
}
int pageSize = 3;
int pageNumber = (CounterForPage ?? 1);
var PageNumberResults = FullDatabaseItem.ToPagedList(pageNumber, pageSize);
ViewBag.PageNumberResults = FullDatabaseItem.Count();
if (PageNumberResults.Any())
{
return View(PageNumberResults);
}
return View("ErrorView");
}
当我删除以下代码时,分页工作正常:
`var Info = db.tblGames.Include(x => x.tblConsole).Where(UserInfo => UserInfo.UserName.Equals(User.Identity.Name)).ToList();`
return View(Info);
但是开关(订购)
下面有一条绿色下划线,上面写着:
Unreachable Code Dectected
我需要两者,因为它们是我申请的一部分。请你能给我一些帮助吗谢谢你的努力
我的视图代码:
@model PagedList.IPagedList<Games.Models.tblGame>
@{
ViewBag.Title = "Index";
}
@*<h2>Index</h2>*@
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
@* <tr>*@
@* <th>
GameID
</th>*@
@* <th>
GameName
</th>
<th>
ReleaseYear
</th>
<th>
Cost
</th>
<th>
Description
</th>
<th>
Downloads
</th>
<th>
Image
</th>
<th>
tblConsole
</th>*@
@* <th>
UserName
</th>*@
@* <th></th>
</tr>*@
@foreach (var item in Model) {
<tr>
@* <td>
@Html.HiddenFor(modelItem => item.GameID)
</td>*@
<td id = "TableLayout1">
<img width="100" height="100"alt="ImageFromDatabase" src='@item.Image' />
</td>
<td id = "TableLayout2">
@*@Html.DisplayFor(modelItem => item.GameName)*@
@Html.ActionLink(item.GameName, "Details", new { id = item.GameID })
</td>
<td id = "TableLayout3">
@Html.DisplayFor(modelItem => item.ReleaseYear)
</td>
<td id = "TableLayout4">
@Html.Raw(item.Description.Substring(0, item.Description.IndexOf(".") + 1))
@* @Html.DisplayFor(modelItem => item.Description)*@
</td>
<td id = "TableLayout5">
@Html.DisplayFor(modelItem => item.Cost)
</td>
<td id = "TableLayout6">
@Html.DisplayFor(modelItem => item.Downloads) @*want this as a link so I can then click on it and show the game downloads*@
</td>
<td id = "TableLayout7">
@Html.DisplayFor(modelItem => item.tblConsole.ConsoleName)
</td>
@* <td>
@Html.HiddenFor(modelItem => item.UserName)
</td>*@
<td id = "TableLayout8">
@Html.ActionLink("Edit", "Edit", new { id=item.GameID }) |
@Html.ActionLink("Details", "Details", new { id = item.GameID }) |
@Html.ActionLink("Delete", "Delete", new { id = item.GameID })
</td>
</tr>
}
</table>
<div class="PageCounter">
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber)
of @Model.PageCount
@if (Model.HasPreviousPage)
{
@Html.ActionLink("<<", "Index", new { CounterForPage = 1, Ordering = ViewBag.CurrentSort, WordFilter = ViewBag.WordFilter })
@Html.Raw(" ");
@Html.ActionLink("< Previous Page", "Index", new { CounterForPage = Model.PageNumber - 1, Ordering = ViewBag.CurrentSort, WordFilter = ViewBag.WordFilter })
}
else
{
@:<<
@Html.Raw(" ");
@:< Prev
}
@if (Model.HasNextPage)
{
@Html.ActionLink("Next Page >", "Index", new { CounterForPage = Model.PageNumber + 1, Ordering = ViewBag.CurrentSort, WordFilter = ViewBag.CurrentFilter })
@Html.Raw(" ");
@Html.ActionLink(">>", "Index", new { CounterForPage = Model.PageCount, Ordering = ViewBag.CurrentSort, WordFilter = ViewBag.CurrentFilter })
}
else
{
@:Next>
@Html.Raw(" ")
@:>>
}
</div>
<script type="text/javascript">
var uvOptions = {};
(function () {
var uv = document.createElement('script'); uv.type = 'text/javascript'; uv.async = true;
uv.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'widget.uservoice.com/ZRhsC1RL1m4gK5megTxxlw.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(uv, s);
})();
</script>
课堂错误:
Error 1 Invalid token '{' in class, struct, or interface member declaration
Error 2 Invalid token ';' in class, struct, or interface member declaration
Error 3 Invalid token ';' in class, struct, or interface member declaration
Error 4 Type or namespace definition, or end-of-file expected
您将从此处的方法返回:
{
var Info = db.tblGames.Include(x => x.tblConsole).Where(UserInfo => UserInfo.UserName.Equals(User.Identity.Name)).ToList();
return View(Info);
}
在此之前是否缺少if
测试?还是你真的想回到这里
看起来你应该:
if (some condition)
{
var Info = db.tblGames.Include(x => x.tblConsole).Where(UserInfo => UserInfo.UserName.Equals(User.Identity.Name)).ToList();
return View(Info);
}
这是有意义的,因为它只返回部分时间,允许执行方法中的其余代码。我不知道某个条件可能是什么。返回语句存在于当前函数中。return语句后面的任何行都不会执行。此代码块缺少某些内容:
{
var Info = db.tblGames.Include(x => x.tblConsole).Where(UserInfo => UserInfo.UserName.Equals(User.Identity.Name)).ToList();
return View(Info);
}
这样写,您只是在创建一个新的范围。对于您当前的代码,这相当于:
var Info = db.tblGames.Include(x => x.tblConsole).Where(UserInfo => UserInfo.UserName.Equals(User.Identity.Name)).ToList();
return View(Info);
并且将始终使方法返回,从不运行开关。您应该弄清楚代码块应该做什么,并调整代码
另一件事:UserInfo.UserName.Equals(User.Identity.Name)
。这在C#中是不必要的,因为=
操作符对于string
是重载的(与java相比,这是不可能的),所以您可以只编写UserInfo.UserName==User.Identity.Name
如何创建一个viewmodel来保存结果和信息对象并将其返回到视图
// Example view model containing data for Info and pagenumberResults needed on the view
// Replace MyInfo with the type of object your info variable is.
public class MyViewModel
{
public MyInfo Info { get; set; }
public PageNumberResults Pages { get; set; }
}
public ViewResult Index(string Ordering, int? CounterForPage)
{
var FullDatabaseItem = from b in db.tblGames
select b;
var Info = db.tblGames.Include(x => x.tblConsole).Where(UserInfo => UserInfo.UserName.Equals(User.Identity.Name)).ToList();
switch (Ordering)
{
case "HeadlineName":
FullDatabaseItem = FullDatabaseItem.OrderBy(b => b.GameName);
break;
case "DatePosted":
FullDatabaseItem = FullDatabaseItem.OrderBy(b => b.ReleaseYear);
break;
case "DiscriptionDate":
FullDatabaseItem = FullDatabaseItem.OrderBy(b => b.ReleaseYear);
break;
default:
FullDatabaseItem = FullDatabaseItem.OrderByDescending(b => b.ReleaseYear);
break;
}
int pageSize = 3;
int pageNumber = (CounterForPage ?? 1);
var PageNumberResults = FullDatabaseItem.ToPagedList(pageNumber, pageSize);
if (PageNumberResults.Any())
{
return View(new MyViewModel()
{
Info = info,
PageNumberResults = FullDatabaseItem.Count()
});
}
return View("ErrorView");
}
然后在您的视图中,用Model.Info或Model.Pages等替换所有对Model的调用,然后试一试。不会返回视图(Info)代码>总是运行,从而使其余部分无法访问?因此,我们建议移动返回视图(info)。好的,在该方法中有两个无条件返回语句。。因此,显然你需要在某处添加一些if
语句..你能给我一个方法说明这些if语句的去向吗?因为我以前没有使用过if语句。也许可以发布一些视图代码,以显示其用法,因为在我看来,这就像你将两个不同的对象传递到视图中,这可能表明它不是强类型的(当然是假设)?只要代码在没有分页的情况下工作,我不介意您提供什么方法。正如这里显示的代码所示,这些游戏对于用户来说是独一无二的。因此,只要它仍然这样做,我可以用什么方法感谢这也是我所想的,它甚至似乎有一些测试条件的空白。你能提供一个答案,如果语句,因为我不是电影人,如何使用它们谢谢you@user1137472-我不知道你想用这个代码实现什么,因此,一个例子是毫无意义的-但是语法是if(){}
我们答案中的第一个代码是为了让用户发布的所有游戏都是唯一的,我知道if的语法,但我不知道在我的解决方案中在哪里实现它们,如果你能为我提供一个解决方案,我真的会很高兴的谢谢你在这个问题上苦苦挣扎了好几年了我把这个返回放在哪里?我把返回放在页面的正下方它声明名称信息在当前上下文中不存在我不想去麻烦创建一个视图模型弄乱我的控制器和更改代码,因为这将是一个很多麻烦是没有办法处理我所拥有的,我也会改变我的观点,因为我添加了额外的jquery代码,这将是一个时间的麻烦experiance@user1137472你的观点不是强类型的吗?如果您发布一些视图代码,可能会有所帮助。对于您的问题,最简单的答案是删除第一个返回视图,因为这就是问题所在。然而,如果您发布了您想要实现的目标,我们可能会提供另一种选择?这行代码var Info=db.tblGames.Include(x=>x.tblConsole)。其中(UserInfo=>UserInfo.UserName.Equals(User.Identity.Name)).ToList();返回视图(信息);是否存在使所有游戏对添加它们的用户都是唯一的,其他登录的用户无法看到其他用户添加了什么。是的,我有一个强类型的视图,并尝试你的答案,我得到错误,说我的视图模型不存在,而我调用了它,事实上,我试图再次实现你的答案,控制器代码在上午是好的,但类显示错误。我会在编辑中发布我所做的事情和错误,请你能看到我做错了什么吗?代码运行良好,在没有分页的情况下进行了测试,并且在我添加分页时运行良好。它会抛出错误是的,因为如果你删除分页,我的帖子中详述的返回
是代码中的最后一行。如果你添加它,返回的将不受影响地执行,错误将出现。我已经尝试了你的答案,第一个它做了同样的事情,说它无法到达感谢你的努力
// Example view model containing data for Info and pagenumberResults needed on the view
// Replace MyInfo with the type of object your info variable is.
public class MyViewModel
{
public MyInfo Info { get; set; }
public PageNumberResults Pages { get; set; }
}
public ViewResult Index(string Ordering, int? CounterForPage)
{
var FullDatabaseItem = from b in db.tblGames
select b;
var Info = db.tblGames.Include(x => x.tblConsole).Where(UserInfo => UserInfo.UserName.Equals(User.Identity.Name)).ToList();
switch (Ordering)
{
case "HeadlineName":
FullDatabaseItem = FullDatabaseItem.OrderBy(b => b.GameName);
break;
case "DatePosted":
FullDatabaseItem = FullDatabaseItem.OrderBy(b => b.ReleaseYear);
break;
case "DiscriptionDate":
FullDatabaseItem = FullDatabaseItem.OrderBy(b => b.ReleaseYear);
break;
default:
FullDatabaseItem = FullDatabaseItem.OrderByDescending(b => b.ReleaseYear);
break;
}
int pageSize = 3;
int pageNumber = (CounterForPage ?? 1);
var PageNumberResults = FullDatabaseItem.ToPagedList(pageNumber, pageSize);
if (PageNumberResults.Any())
{
return View(new MyViewModel()
{
Info = info,
PageNumberResults = FullDatabaseItem.Count()
});
}
return View("ErrorView");
}