我想获取在MVC用户表单中输入的数据并将其显示在不同的视图中.
该类具有以下私有变量:
IList_pagecontent = new List ();
以下操作接受FormCollection对象,验证它,并将其作为List传递到"预览"视图:
[Authorize(Roles = "Admins")] [ValidateInput(false)] [AcceptVerbs(HttpVerbs.Post)] public ActionResult UpdateContent(FormCollection collection) { if (ModelState.IsValid) { string PageToInsert = collection["PageToInsert"]; string PageHeader = collection["PageHeader"]; string PageBody = collection["PageBody"]; //validate, excluded... _pagecontent.Add(PageToInsert); _pagecontent.Add(PageHeader); _pagecontent.Add(PageBody); } return RedirectToAction("Preview", _pagecontent); }
预览视图具有以下页面指令,用于传递强类型对象List:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Template.Master" Inherits="System.Web.Mvc.ViewPage>" %>
我希望能够使用Model对象来获取我的数据,但我不能.在接下来的行中,我得到一个error index out of bounds
异常,声明索引必须是非负数且小于集合的大小:
<% if (Model[0].ToString() == "0") { %>
并且一些奇怪的参数已经添加到URL中,因为它解析为
http://localhost:1894/Admin/Preview?Capacity=4&Count=3
所以我有两个问题:
当我调用RedirectToAction并将其传递给我的List时,为什么在视图的Model对象中无法访问它?
做正在做的事情的正确方法是什么,即将一组字符串传递给视图以便在那里显示?
MichaelGG.. 56
尝试使用TempData.它就像一个单次会话对象.您将所需的值放入TempData,立即重定向并将其取出.这里有一篇很好的文章:http://blogs.teamb.com/craigstuntz/2009/01/23/37947/
尝试使用TempData.它就像一个单次会话对象.您将所需的值放入TempData,立即重定向并将其取出.这里有一篇很好的文章:http://blogs.teamb.com/craigstuntz/2009/01/23/37947/
使用TempData时要小心.它在单个服务器环境中运行良好,但在云环境中,它可能无法正常工作,因为您无法保证请求将在同一台计算机上运行.这是因为TempData依赖于asp.net会话.但是,如果您正在使用其他会话管理器,如SQL或AppFabric Cache,它将正常工作.
RedirectAction的第二个参数是routeValues,而不是model.
protected internal RedirectToRouteResult RedirectToAction(string actionName, object routeValues);
尝试使用TempData作为模型.它用于在重定向之间保持数据.