-3

こんにちは、コントローラーに次のコードがあります。

 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);

しかし、下に緑色の下線があり、次のように書かれてswitch (ordering)います。

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
        &nbsp;
        @if (Model.HasPreviousPage)
        {

            @Html.ActionLink("<<", "Index", new { CounterForPage = 1, Ordering = ViewBag.CurrentSort, WordFilter = ViewBag.WordFilter })
            @Html.Raw("&nbsp;");
            @Html.ActionLink("< Previous Page", "Index", new { CounterForPage = Model.PageNumber - 1, Ordering = ViewBag.CurrentSort, WordFilter = ViewBag.WordFilter })
        }
        else
        {
            @:<<
            @Html.Raw("&nbsp;");
            @:< Prev
        }
        &nbsp;
        @if (Model.HasNextPage)
        {
            @Html.ActionLink("Next Page >", "Index", new { CounterForPage = Model.PageNumber + 1, Ordering = ViewBag.CurrentSort, WordFilter = ViewBag.CurrentFilter })
            @Html.Raw("&nbsp;");
            @Html.ActionLink(">>", "Index", new { CounterForPage = Model.PageCount, Ordering = ViewBag.CurrentSort, WordFilter = ViewBag.CurrentFilter })
        }
        else
        {
            @:Next>
            @Html.Raw("&nbsp;")
            @:>>
        }



    </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>

作成されたクラス:

namespace Games.Models
{
   using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Web;
    using PagedList;
    using System.Web.Mvc;


    public class MyViewModel
    {
       public MyInfo Info { get; set; }
   public PageNumberResults { get; set; }

    }
}

クラスからのエラー:

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   
4

4 に答える 4

2

このコード ブロックに何かが欠けています:

{
    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);

そして、常にメソッドを返すようにし、決して実行しませんswitch。そのコード ブロックが何をすべきかを理解し、コードを調整する必要があります。

もう一つ: UserInfo.UserName.Equals(User.Identity.Name). これは C# では必要ありません。これは、==演算子がオーバーロードされているためstring(これが不可能な Java とは対照的に)、単にUserInfo.UserName == User.Identity.Name.

于 2012-04-09T22:14:45.020 に答える
1

ここのメソッドから戻っています:

{
    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);
}

これは、メソッド内の残りのコードを実行できるように、一部の時間だけ返されるため、理にかなっています。何some conditionができるかわかりません。

于 2012-04-09T22:11:41.520 に答える
0

結果と情報オブジェクトを保持し、それをビューに返すビューモデルを作成するのはどうですか?

// 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へのすべての呼び出しをModel.InfoまたはModel.Pagesなどに置き換えて実行します。

于 2012-04-09T22:17:31.000 に答える
0

return ステートメントは現在の関数に存在します。return ステートメントの後の行は実行されません。

于 2012-04-09T22:11:59.423 に答える