通过ViewBag将值从控制器传递到View

时间:2016-08-10 08:26:52

标签: c# asp.net-mvc

所以我有一个控制器,我似乎可以理解如何将参数传递给我的ActionResult方法。

routes.MapRoute(
            name: "MyRoute",
            url: "{controller}/{name}/{id}",
            defaults: new { controller = "Project", name = "Search", id = UrlParameter.Optional }
        );

这是我的路线。现在在我的控制器中我已经创建了一个方法

[HttpGet]
public ActionResult Search()
{
    return View();
}

[HttpPost]
public ActionResult Search(int Id)
{
    ViewBag.iD = Id;
    return View();
}

在我看来

<body>
    <div>
        ASDF + @ViewBag.iD
    </div>
</body>

如何从搜索操作中将值传递给我的iD参数?似乎无论我称之为什么 http://localhost:52992/Project/Search/id=2http://localhost:52992/Project/Search/1

两种方法都进入Search()方法,没有一种进入Search(int iD)。

我错过了什么?

3 个答案:

答案 0 :(得分:2)

您视图中的链接(或带有FormMethod.Get的表单或在地址栏中输入网址)会进行GET调用,而不是POST,因此您的方法应为

[HttpGet]
public ActionResult Search(int ID)
{
    // do something based on the value of ID
    ViewBag.iD = ID;
    return View();
}

并删除[HttpPost]方法。

答案 1 :(得分:0)

您必须传递HttpGet&#39; SearchAction&#39;方法。如果你从它传递,那么只有值会在视图中显示

[HttpGet]
public ActionResult Search()
{
    ViewBag.iD = your Id value here;
    return View();
}

在初始加载时,将调用get方法,仅提交&#39; post&#39;方法将被呼叫 希望这有帮助。

答案 2 :(得分:0)

在你的观点

<a href='@Url.Action("ActionName", "ControllerName", new { id= 10})'>...</a>

OR

 @{ 
int id = 10 
}
    <a href="/ControllerName/ActionName/@id"> ... </a>

关于你的行动

Public ActionResult Search(int id)
{
Viewbag.Id = id;
return view();
}

默认情况下,[HTTPGET]上的操作你不必提及