0

MVCでC#を書くのはこれが初めてです。行の値を cookie に追加して行数を生成したいのですが、その方法がわかりません。

より良い解決策があれば、よろしくお願いします。:)

まず、クッキーを作成します

if (Request.Cookies["UserSettings"] != null)
        {
            HttpCookie myCookie = new HttpCookie("UserSettings");
            myCookie["Row"] = "5";
            myCookie.Expires = DateTime.Now.AddDays(1d);
            Response.Cookies.Add(myCookie);
        }

次に、Cookie を読み取り、コントローラーで Cookie から行を読み取り、「Viewbag.RowCookie」を介して送信して表示します

 if (Request.Cookies["UserSettings"] != null)
        {
            string userSettings;
            if (Request.Cookies["UserSettings"]["Row"] != null)
            {
                userSettings = Request.Cookies["UserSettings"]["Row"];
                ViewBag.RowCookie = userSettings;
            }

        }
        return View();

最後に、ビューで、ページをクリックするとエラーが表示されます。(別のページで行の値が問題ないことを確認したことに注意してください。)

   @{int row = 3 ;
      row = (int)ViewBag.RowCookie; } // the problem is this line

     @for (int i = 0; i < row ; i++)
    {
        <tr>
            <td>
                <p>
                    @Html.Label("Name")
                    @Html.EditorFor(model => model.Name[i])</p>
            </td>
            <td>
                <p>
                    @Html.Label("Prob" + (i+1))
                    @Html.EditorFor(model => model.Prop[i])</p>
            </td>
            <td>
                <p>
                    @Html.Label("Forecast" + (i+1))
                    @Html.EditorFor(model => model.Forecast[i])</p>
            </td>
            <td> <p>
                    @Html.DisplayFor(model => model.AxB[i])
                  </p>
            </td>
             <td> <p>
                    @Html.DisplayFor(model => model.PowAxB[i])
                  </p>
            </td>
        </tr>

助けてくれてありがとう。

4

1 に答える 1

3

を使用して文字列を整数にキャストすることはできません(int) myString

ViewBagを設定するとき、あなたはすることができます

ViewBag.RowCookie = int.Parse(userSettings);

その後、それはちょうどint row = ViewBag.RowCookie;ビューにあります。

とはいえ、あなたが何をしているのかわからないので、このようなCookieとViewBagを使用したい状況を想像するのは難しいと思います。特定のインデックスを超える配列のデータを使用したくない場合は、ビューモデルを作成するときにそのインデックスに制限してください。次に、forループは

@for (int i = 0; i < Model.Name.length; i++)

以上、すべてのプロパティをIEnumerableコレクションにリファクタリングします

ビューでそれを制限します

@for (int i = 0; i < Model.YourCollection.Count(); i++)

補足:

if (Request.Cookies["UserSettings"] != null)
    {
        HttpCookie myCookie = new HttpCookie("UserSettings");
        myCookie["Row"] = "5";
        myCookie.Expires = DateTime.Now.AddDays(1d);
        Response.Cookies.Add(myCookie);
    }

意味がなかったのRequest.Cookies["UserSettings"] == nullですか?

于 2012-05-17T05:35:50.093 に答える