我的控制器名称是" 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
为什么?
答案 0 :(得分:2)
如果您使用GET请求导航到此页面,则表示您正在执行方法Index()
,并且在呈现页面时Name
为HttpGet
,因此它将创建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");
}