2012-03-19 100 views
3

我有一个视图,用户将填充所有内容 - 但涉及父实体。我使用ViewBag将该Id传递给了我的视图,但是我不知道如何将它返回到控制器中的发布操作。我试图隐藏表单域,但它不是在后显示,否则我不知道如何抓住它... 控制器:MVC3 Razor - 如何将数据从控制器传递到控制器并返回控制器

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

视图(尝试):

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

如何在我的控制器中检索我的发布操作中的值?还是有更好的/不同的方法来处理它? 感谢

回答

2

隐藏字段应该作品。问题是你的控制器不接受它。

您可以使用ViewModel来实现这一点。或者,在您的动作中使用以下代码:

id = Request.Form["id"] 
+0

谢谢你的回应。我使用了Robby Shaw的Request.Form。 – user1166147 2012-03-19 08:23:45

0

尝试这样的:

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

谢谢。您是否可以在我的控制器中检索后操作中的值? – user1166147 2012-03-19 07:54:25

+0

你可以让你的控制器动作带有'Id'属性的视图模型。默认的模型联编程序会自动填充这个属性。 – 2012-03-19 07:56:06

9

为后创建一个视图模型,这将是如下

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) 
    } 

和你的控制器动作,其结果预计应该有一个帖子对象作为输入参数

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

好的解决方案 谢谢 – Jones 2013-07-18 06:32:16

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 
} 
相关问题