为什么在PostBack之后可以清除ViewBag的值?

时间:2015-05-30 20:04:18

标签: c# asp.net-mvc-5

我的控制器名称是" demo" 。我写了两个名为" Index" 的动作。第一个使用 [HttpGet] ,秒数为 [HttpPost]

但是,当我需要View中的PostBack时,动作[HttpGet] public ActionResult Index() {} ViewBag.Name 的值无法清除。

[HttpGet]
        public ActionResult Index()
        {
            ViewBag.Name = "HttpGet";
            return View();
        }

        [HttpPost]
        public ActionResult Index(FormCollection form)
        {
            ViewBag.Name = "HttpPost";
            return View();
        }

在RouteConfig.cs中:

routes.MapRoute(
                name: "newroute",
                url: "demo/index/{type}",
                defaults: new { controller = "demo", action = "Index", type = UrlParameter.Optional }
            );

和视图:

<form method="post" action="@Url.Action("Index", "demo", new { type = @ViewBag.Name })">
    <input type="submit" value="Click me" />
</form>

@ViewBag.Name

以下是我的问题:当我点击该按钮时,页面中@ViewBag.Name的值为&#34; HttpPost&#34; 。但是,在网址中,它是/demo/index/HttpGet

为什么?

2 个答案:

答案 0 :(得分:2)

如果您使用GET请求导航到此页面,则表示您正在执行方法Index(),并且在呈现页面时NameHttpGet,因此它将创建URL表单操作为/ demo / index / HttpGet。

稍后,按下按钮后,您将发布到上一步中创建的URL,但由于表单正在POST,您正在执行Index(FormCollection form),并将Name设置为HttpPost。该URL仍然是上一步生成的内容。

答案 1 :(得分:0)

试一试:

[HttpGet]
    public ActionResult Index()
    {
        ViewBag.Name = "HttpGet";
        return View();
    }

    [HttpPost]
    public ActionResult Index(FormCollection form)
    {
        ViewBag.Name = "HttpPost";
        return RedirectToAction("Index");
    }