Asp.net mvc 3 如何迭代ViewBag或如何将ViewBag的值从一个操作复制到另一个操作
我有一个像follow这样的基本控制器Asp.net mvc 3 如何迭代ViewBag或如何将ViewBag的值从一个操作复制到另一个操作,asp.net-mvc-3,Asp.net Mvc 3,我有一个像follow这样的基本控制器 public abstract class BaseController { protected ActionResult LogOn(LogOnViewModel viewModel) { SaveTestCookie(); var returnUrl = ""; if (HttpContext != null && Ht
public abstract class BaseController
{
protected ActionResult LogOn(LogOnViewModel viewModel)
{
SaveTestCookie();
var returnUrl = "";
if (HttpContext != null && HttpContext.Request != null && HttpContext.Request.UrlReferrer != null)
{
returnUrl = HttpContext.Request.UrlReferrer.LocalPath;
}
TempData["LogOnViewModel"] = viewModel;
return RedirectToAction("ProceedLogOn", new { returnUrl });
}
public ActionResult ProceedLogOn(string returnUrl)
{
if (CookiesEnabled() == false)
{
return RedirectToAction("logon", "Account", new { area = "", returnUrl, actionType, cookiesEnabled = false });
}
var viewModel = TempData["LogOnViewModel"] as LogOnViewModel;
if (viewModel == null)
{
throw new NullReferenceException("LogOnViewModel is not found in tempdata");
}
//Do something
//the problem is I missed the values which are set in the ViewBag
}
}
和另一个控制器
public class MyController : BaseController
{
[HttpPost]
public ActionResult LogOn(LogOnViewModel viewModel)
{
// base.LogOn is used in differnet controller so I saved some details in view bag
ViewBag.Action = "LogonFromToolbar";
ViewBag.ExtraData = "extra data related only for this action";
return base.LogOn(viewModel);
}
}
问题是我没有在ProceedLogOn操作方法中查看包值。
我在BaseController的Logon方法中有值
如何将ViewBag的值从一个操作复制到另一个操作
所以我不能简单地说this.ViewBag=ViewBag代码>
因为ViewBag没有setter。我正在考虑遍历viewbag。
我尝试了ViewBag.GetType().GetFields()
和ViewBag.GetType().GetProperties()
,但它们没有返回任何结果。ViewData反映了ViewBag
您可以像这样迭代存储的值:
ViewBag.Message = "Welcome to ASP.NET MVC!";
ViewBag.Answer = 42;
foreach (KeyValuePair<string, object> item in ViewData)
{
// if (item.Key = "Answer") ...
}
ViewBag.Message=“欢迎使用ASP.NET MVC!”;
ViewBag.Answer=42;
foreach(ViewData中的KeyValuePair项)
{
//如果(item.Key=“Answer”)。。。
}
这也应该很有用ViewData反映了ViewBag
您可以像这样迭代存储的值:
ViewBag.Message = "Welcome to ASP.NET MVC!";
ViewBag.Answer = 42;
foreach (KeyValuePair<string, object> item in ViewData)
{
// if (item.Key = "Answer") ...
}
ViewBag.Message=“欢迎使用ASP.NET MVC!”;
ViewBag.Answer=42;
foreach(ViewData中的KeyValuePair项)
{
//如果(item.Key=“Answer”)。。。
}
这也应该很有用恐怕我不知道如何复制ViewBag
然而,我决不会那样使用ViewBag
ViewBag是控制器提供给视图的一些数据,如果有人出于某些原因不喜欢使用ViewModel,则可以渲染输出。视图永远不应该知道有关控制器的任何信息,但您的ViewBag中有一个ActionName;)
无论如何,ProceedLogOn操作方法有很多参数,它们是。。。实际上,这不是一个好代码,所以为什么要犹豫添加更多当前在MyController.Logon ViewBag中保留的参数呢?然后在方法ProceedLogOn中,您得到了您想要的
)() 恐怕我不知道如何复制ViewBag
然而,我决不会那样使用ViewBag
ViewBag是控制器提供给视图的一些数据,如果有人出于某些原因不喜欢使用ViewModel,则可以渲染输出。视图永远不应该知道有关控制器的任何信息,但您的ViewBag中有一个ActionName;)
无论如何,ProceedLogOn操作方法有很多参数,它们是。。。实际上,这不是一个好代码,所以为什么要犹豫添加更多当前在MyController.Logon ViewBag中保留的参数呢?然后在方法ProceedLogOn中,您得到了您想要的
)() 我知道最好使用TempData,但我不想更改现有的功能!!我认为您应该接收ViewBag
值,并在另一个操作中再次设置它,在LogOn
视图中的示例中,您可以将数据保存在隐藏字段或模型属性中,然后再次发送。这可能会有帮助:仍然。。。使用TempData
为此,我知道最好使用TempData,但我不想更改现有功能!!我认为您应该接收ViewBag
值,并在另一个操作中再次设置它,在LogOn
视图中的示例中,您可以将数据保存在隐藏字段或模型属性中,然后再次发送。这可能会有帮助:仍然。。。为此使用TempData