我有一个视图,其中所有内容都将由用户填充 - 但与父实体相关。我使用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())
请问我在控制器中的帖子操作中检索值?或者有更好/不同的方法来接近它吗? 感谢
答案 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
}