这是第一次在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>
谢谢大家的帮助。
答案 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
吗?