2012-08-22 56 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); 
    } 
相關問題