Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC3中将模型从一个控制器传递到另一个控制器不起作用_C#_Asp.net_Asp.net Mvc 3 - Fatal编程技术网

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的任何值。你能帮我一下吗。。