如何从cookie获取数据,使用Viewbag在mvc3中查看C#

时间:2012-05-17 03:56:00

标签: c# asp.net-mvc-3 cookies view

这是第一次在MVC中编写C#。我将行值添加到cookie并希望它生成行数,但我不知道该怎么做。

如果你们有更好的解决方案,我将不胜感激。 :)

首先,创建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,在Controller中从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>

谢谢大家的帮助。

1 个答案:

答案 0 :(得分:2)

您不能使用(int) myString

将字符串转换为整数

设置ViewBag时可以执行

ViewBag.RowCookie = int.Parse(userSettings);

然后在视图中只是int row = ViewBag.RowCookie;

那就是说,在不知道你在做什么的情况下,我很难想象你想要使用像这样的cookie和ViewBag的情况。如果您不想在超过某个索引的数组中使用数据,请在创建viewmodel时将其限制为该索引。然后你的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吗?