MVC3 Razor - 如何将数据从控制器传递到视图 - 并返回到控制器

时间:2012-03-19 07:44:00

标签: asp.net-mvc-3 razor

我有一个视图,其中所有内容都将由用户填充 - 但与父实体相关。我使用ViewBag将该Id传递给我的视图,但我不知道如何将其恢复到控制器中的post动作。我已经尝试了隐藏的表单字段,但它没有在帖子中显示,或者我不知道如何抓住它... 控制器:

public ActionResult AddCar(int id)
{
ViewBag.Id = id;
return View();
}

查看(已尝试):

    @using (Html.BeginForm("AddReturn", "DealerAdmin", new { id = carId }))
    {
View (tried):
     @Html.Hidden(carId.ToString())

请问我在控制器中的帖子操作中检索值?或者有更好/不同的方法来接近它吗? 感谢

4 个答案:

答案 0 :(得分:9)

为post创建一个ViewModel,它将如下

public class Post
{
   int id {get;set;}
   //other properties
}

并在您的控制器操作中发送一个帖子对象

public ActionResult AddCar(int id)
{
 Post post = new Post();
 post.Id = id;
return View(post);
}

您的视图应使用Post类作为模型

@model namespace.Post
@using (Html.BeginForm("AddReturn", "DealerAdmin", FormMethod.Post)
    {
      @Html.HiddenFor(model => model.Id)
    }

和您期望结果的控制器操作应该有一个post对象作为输入参数

public ActionResult AddReturn(Post post)
{
 //your code
}

答案 1 :(得分:2)

隐藏字段应该有效。问题是您的控制器不接受它。

您可以使用ViewModel来实现此目的。或者,在您的操作中使用以下代码:

id = Request.Form["id"]

答案 2 :(得分:0)

试试这样:

@using (Html.BeginForm("AddReturn", "DealerAdmin", new { id = ViewBag.Id }))
{
    ...
}

答案 3 :(得分:0)

有某种方式
1.如果只有一个值发送给控制器,则使用查询字符串发送值 2.如果你想从视图中收集许多字段,你可以使用formcollection
样品::

public actionresult method1()
{
 int id = //everything you want
 viewbag.id=id;
 ....
 //and other field to collect
}

在视图中

<form method="post" action="method1" enctype="now i dont remeber the value of this option" >

@html.hidden("id")
.....

<input type="submit" value"Send"/>
</form>

[httpPost]
public actionresult method1(fromcollection collection)
{
 int id = collection.get("id");
 ....
 //and other field to collect
}