C# 在MVC3中将模型从一个控制器传递到另一个控制器不起作用
我将模型从一个控制器方法传递到另一个控制器方法,以收集模型字段的所有值。我正在做如下所示C# 在MVC3中将模型从一个控制器传递到另一个控制器不起作用,c#,asp.net,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc 3,我将模型从一个控制器方法传递到另一个控制器方法,以收集模型字段的所有值。我正在做如下所示 [HttpPost] public ActionResult A(Model m, string s) { if (ModelState.IsValid) { if (m.l == null || m.k == null) { //Do something.
[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谁是帮助我好。
提前感谢。该代码--返回视图(“B”,m)
--实际上并没有重定向到操作B,它只是用给定的模型渲染视图B。如果要执行该操作,则应使用:
return B(m);
该代码--返回视图(“B”,m)
--实际上并没有重定向到操作B,它只是用给定的模型呈现视图B。如果要执行该操作,则应使用:
return B(m);
试试这样的
[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);
}
试试这样的
[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);
}
您不应该从另一个操作调用一个操作。视图结果在控制器操作方法(顶部方法)执行后执行。从另一方调用操作不是有意的,可以为同一操作方法提供多条路径。控制器的目的是协调数据。如果您认为应该调用多个方法,那么您应该将这些方法分解为其他门面类或服务层类,每个需要它的控制器都会请求它们,或者将这些信息聚合到域对象中,然后从中填充视图模型 如果其中任何一个不清楚,我将进一步澄清 或者调用多个存储库方法来获取数据并填充到视图模型中 或 使用父视图并从视图中调用RenderAction以发出其他控制器数据 或者使用RenderPartial来使用父视图对象传递给每个子视图以渲染其部分,但我更喜欢RenderAction,除非所有数据都可以用于顶级视图的视图模型。 或
从控制器调用facade layer类,该类依次从各个位置获取数据,执行xyz并将其返回给控制器,然后由控制器根据该数据填充视图模型。您不应从其他操作调用操作。视图结果在控制器操作方法(顶部方法)执行后执行。从另一方调用操作不是有意的,可以为同一操作方法提供多条路径。控制器的目的是协调数据。如果您认为应该调用多个方法,那么您应该将这些方法分解为其他门面类或服务层类,每个需要它的控制器都会请求它们,或者将这些信息聚合到域对象中,然后从中填充视图模型 如果其中任何一个不清楚,我将进一步澄清 或者调用多个存储库方法来获取数据并填充到视图模型中 或 使用父视图并从视图中调用RenderAction以发出其他控制器数据 或者使用RenderPartial来使用父视图对象传递给每个子视图以渲染其部分,但我更喜欢RenderAction,除非所有数据都可以用于顶级视图的视图模型。 或 从控制器调用facade layer类,该类依次从各个位置获取数据,执行xyz并将其返回给控制器,然后由控制器根据该数据填充视图模型 请尝试下面的代码。它应该会起作用。这是@dbaseman答案的另一种选择 请尝试下面的代码。它应该会起作用。这是@dbaseman答案的另一种选择
您如何知道
B
未执行?你也在那里放了一个断点吗?是的,我放了。我想做的是从不同的控制器收集数据到模型中。我会把问题编辑成我想做的。右括号不匹配。你能再检查一下你的帖子吗?我已经试过给出的答案了。但是它仍然给出A的视图,但是我想得到B的视图,你怎么知道B
没有执行?你也在那里放了一个断点吗?是的,我放了。我想做的是从不同的控制器收集数据到模型中。我会把问题编辑成我想做的。右括号不匹配。你能再检查一下你的帖子吗?我已经试过给出的答案了。但它仍然给出了A的视图,但我想得到BI的视图。我已经尝试过了,它转到B方法并通过B执行,然后返回到A并显示A的视图。我将返回B(m)更改为B(m),但它的工作原理相同(@hmm…你能把动作B中的代码改成返回视图(“B”,m)吗)?这应该确保返回正确的视图。是的,现在转到视图B。但是模型在B的post方法中不包含变量l,k的任何值。你能帮我吗?我尝试过这个,它转到B方法并通过B执行,然后返回到A并显示A的视图。我更改了returnb(m)到B(m),但它的工作原理是一样的。(@hmm…你能把动作B中的代码改成返回视图(“B”,m)吗?这应该确保返回正确的视图。是的,现在它转到视图B。但是模型在B的post方法中不包含变量l,k的任何值。你能帮我一下吗。。