2012-08-22 58 views
1

我传递的模型从一个控制器方法到另一个控制器的方法来收集所有的值来建模领域。我正在做如下所示从一个控制器传递一个模型到另一个控制器在MVC3不工作

[HttpPost] 
    public ActionResult A(Model m, string s) 
    { 
     if (ModelState.IsValid) 
     { 
      if (m.l == null || m.k == null) 
      { 
       //Do something. 

      } 
      else 
       return View("B", m); // this is where by debug point comes... 
     } 

     return View(m); 


    } 


public ActionResult B(Model m) 
    { 

     return View(m); 
    } 

[HttpPost] 
    public ActionResult B(Model m, string s) 
    { 
     if (ModelState.IsValid) 
     { 
      if (m.p == null || m.j == null) 
      { 
       //do something 
      } 
      else 
      { 
       // do something and redirect to somewhere else 
      } 


     } 

但正如我所示的调试点来这里如下所示。

return View("B", m); 

这应该打控制器方法“B”但问题是它没有命中控制器方法“B”。但它显示了控制器方法“B”的视图所以,我对这个问题感到困惑。我在“B”方法的httppost中看不到(l,k)的值。这是什么原因。

我想知道,我这样做对还是错。如果我这样做是错误的,请你就此解释一下。能够擅长MVC的人能帮助我吗? 在此先感谢。

+0

你怎么知道答案的替代'不执行B'?你有没有在那里放置一个断点? –

+0

是的,我做到了。我想要做的是从不同的控制器向模型收集数据。我将修改的问题正是我想要做的 –

+0

的结束括号不匹配 - 你能仔细检查您的文章PLZ? – StuartLC

回答

7

该代码 - return View("B", m) - 其实并不重定向到行动 B,它只是呈现视图 b将定模式。如果要执行的动作,那么你应该使用:

return B(m); 
+0

。非常感谢 –

+0

我已经尝试过这一点,它进入B方法并通过B执行,然后返回到A并显示A的视图。并且我将返回B(m)更改为B(m),但它起作用相同。 :( –

+1

@Diode嗯......你可以更改Action ** B **内的代码到*返回视图(“B”,m)*?这应该确保正确的视图被发回。 – McGarnagle

1

尝试这样的事情,

[HttpPost] 
public ActionResult A(Model m, string s) 
{ 
    if (ModelState.IsValid) 
    { 
     if (m.l == null || m.k == null) 
     { 
      //Do something.      
     } 
     else 
      RedirectToAction("B", m); // check this 
    } 
    return View(m);  
} 

public ActionResult B(Model model) 
{ 
    return View(model); 
} 
2

你不应该从另一个调用操作的操作。在执行控制器操作方法(顶层)之后执行视图RESULT。从另一个角度调用行为不是意图,可以为同一个行为方法提供多种途径。你的控制器的目的是编排数据。如果你认为多个方法应该被称为则应开打破这些成其他门面类或服务层类,每个需要它将请求它或聚集此信息转换成域对象,您然后从

填充视图模型控制器

如果有任何不明确的地方,我会进一步澄清。

要么调用几个仓库的方法来获取数据并填充到一个视图模型 或者 使用父视图,然后从视图中调用的RenderAction发出其他控制器的数据

或者使用的RenderPartial使用你的父母的意见对象传递给每个子视图来渲染它的一部分,但我更喜欢RenderAction,除非所有数据都适合您的顶级视图的视图模型。 或者 呼叫从自己的控制器外观层类,依次从不同位置获取数据,做XYZ并将其返回到控制器谁,然后填充从这个数据视图模型。

1

尝试下面的代码。它应该工作。这是@dbaseman的

[HttpPost] 
    public ActionResult A(Model m, string s) 
    { 
     if (ModelState.IsValid) 
     { 
      if (m.l == null || m.k == null) 
      { 
       //Do something.      
      } 
      else 
      { 
       TempData["tempModel"]=m; //cannot pass a model in a redirect method. so store it in a tempdata object. 
       return RedirectToAction("B"); // redirect to action method B 
      } 
     } 
     return View(m);  
    } 

    public ActionResult B() 
    { 
     Model model= new Model(); 
     if(TempData["tempModel"]!=null) 
      model=(Model)TempData["tempModel"]; 
     return View(model); 
    } 
相关问题