MVC 3通过HTTPPOST将数据从HTML传递到控制器到另一个控制器

时间:2012-07-27 11:42:20

标签: asp.net-mvc asp.net-mvc-3 controller parameter-passing

我不知道我做错了,但这是我的问题。我需要将View的数据传递给另一个Controller/Action

在我的HTML表单中,我有

@using (Html.BeginForm("Preprocess", "Item", FormMethod.Post))
{
   ...some html...
   ...loop for each item in Items collection
   <button type="submit" name="itemInfo" value="@Model.someValue">Submit</submit>
}

我在Item/Preprocess操作(强类型视图)上收到了表单的数据。但是,我需要将其传递给“中央处理器”,该处理器根据某个标志处理数据。如何将我在此控制器上收到的值传递给另一个控制器?我是MVC的初学者,我甚至不确定这是否是正确的方法。

基本上,我有三个类似于上述表单的HTML表单,但具有不同的ControllersViews。我需要他们调用一个中央主人 - Controller/Action,当然还要通过Controller将数据从表单传递给主HTTPPOST。当然,每个Controller必须将自己的数据格式化为主Controller可以接受的类。我应该用什么代替Return View()RedirectToAction(...)

你们可以建议一种方法吗?

或许你们可以提出另一种方式。它可能不符合我的要求,但基本上我的要求是中央控制器/动作(或其他一些集中代码)可以接收数据并根据值进行操作

2 个答案:

答案 0 :(得分:0)

你可以这样做:

 return RedirectToAction("SomeAction", "SomeController",new { id=someString} );

答案 1 :(得分:0)

不确定我是否完全遵循您在此处尝试做的事情。但是根据你的描述,听起来你的设计是错误的。

如果您在控制器收到并处理数据后尝试执行一些常用操作,那么您应该将“中央控制器”提升为某种服务类,可由所有三个控制器访问。如有必要,服务类可以返回ActionResult:

return new ViewResult { ViewName = "MyForm" };

但是,如果您想拦截数据并执行一些常见操作,您可以编写自定义ActionFilter来执行中央控制器正在执行的任何操作,并使其他控制器保持清洁。