Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 如何迭代ViewBag或如何将ViewBag的值从一个操作复制到另一个操作_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 3 如何迭代ViewBag或如何将ViewBag的值从一个操作复制到另一个操作

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

我有一个像follow这样的基本控制器

 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