Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
Javascript 如何重定向到不同的控制器?_Javascript_Asp.net Mvc_Model View Controller - Fatal编程技术网

Javascript 如何重定向到不同的控制器?

Javascript 如何重定向到不同的控制器?,javascript,asp.net-mvc,model-view-controller,Javascript,Asp.net Mvc,Model View Controller,我在ASP.MVC中有一个应用程序。要求是我从人员列表中选择一个人,然后单击“信息”,它会在该页面中加载该人的详细信息。我有一个信息控制器,如果我从另一个控制器转到信息页面,一切正常。在页面中,我试图让它与JavaScript一起工作,它似乎并没有将我带到所需的页面,而是带到另一个控制器 我有一个ToDoList控制器,在.cshtml中,我点击信息链接得到了这段代码 function DoInfo@(i.ToString())() { $("#sessionid").val

我在ASP.MVC中有一个应用程序。要求是我从人员列表中选择一个人,然后单击“信息”,它会在该页面中加载该人的详细信息。我有一个信息控制器,如果我从另一个控制器转到信息页面,一切正常。在页面中,我试图让它与JavaScript一起工作,它似乎并没有将我带到所需的页面,而是带到另一个控制器

我有一个ToDoList控制器,在.cshtml中,我点击信息链接得到了这段代码

 function DoInfo@(i.ToString())() {
         $("#sessionid").val("@Model.cSessionId[i]");
         alert("hey");
         $("#PageController").val(66);
         $("#formID").submit();
    }
我转到ToDoList控制器来执行如下重定向

  if (viewModel.PageController == 66)  
        {
            pass = new PassingData();
            pass.personid = TSSessionService.ReadPersonId(viewModel.SessionId);
            TempData["pass"] = pass;

            return RedirectToAction("Index", "Info");
        }
它从不去那里,而是去另一个控制器。我似乎无法找到它们是如何链接的,为什么不返回到“信息链接”按钮所在的控制器,即返回到ToDoList控制器


如果不清楚,请告诉我,我将尝试再次解释,并提供任何其他细节

我想我不明白为什么要将表单和JavaScript结合起来使用。您是否需要传递其他您没有在上面发布的属性?如果您只是返回一个新视图,为什么需要使用JavaScript来执行此操作

您在帖子中指出,当从列表中选择一个人时,您需要转到控制器并显示视图。这似乎相当简单,我想建议简化这个问题

首先:将链接更改为不使用表单或JavaScript。把它做成一个链接。如果是文本,您可以使用@Html.ActionLink,甚至可以传入所需的参数

如果不显示文本,只需在包装元素的锚点的href属性中使用@Url.ActionLink。这两种方法都允许您利用路由来确保构建正确的路径

如果您试图访问的控制器可以访问任何TSSessionService,那么您不需要通过您试图通过的TempData[pass],这样也可以使它更干净

如果您确实需要提交更复杂的值集,我建议您在jQuery中提供一个泛型的.click事件处理程序,它可以响应任何单击,并由一个公共类名绑定。您可以在链接中使用数据val属性,并从处理程序中的$this.attr'data-val'读取数据,以存储/获取其他重要信息。这使您可以更轻松地构建要发布到控制器的对象


希望这能有所帮助,但如果我遗漏了一个关键点,请更新上面的问题。

您的MVC应用程序中是否有区域和两个不同的区域具有相同的控制器名称?需要从不同的区域调用Info controller。当我从“AP”控制器调用它时,它工作正常,但当我尝试从“ToDoList”控制器调用时,它工作不正常。我确实收到了警报,但不确定为什么控件会转到“Double”控制器。您是否尝试通过保留断点来调试C代码块,以确保操作方法中的其他代码块得到执行并重定向到其他控制器?此外,请检查是否为区域和控制器组合定义了正确的路由约束,否则通用/默认约束将获得优先级。如何通过javascript将隐藏字段中的值传递给控制器?我需要通过javascript将所选id传递给控制器。我尝试了这个功能,但没有成功DoInfo@i.ToString{$SessionId.val$sessionid@i.ToString.val;alerthey;$PageController.val72;$formID.submit;}我可以再解释一遍。我有一个显示“会话”列表的页面。每个会话都列出了三个选项。信息,打开并邮寄。现在,当单击“信息”时,我需要从另一个控制器加载另一个视图,该控制器期望PId通过传递数据。这是什么是现有的代码,我需要使信息链接的工作。我不必使用JavaScript,但这似乎是一种方式,因为在控制器中,我可以从SessionId读取PId。问题是SessionId未通过脚本。我愿意使用@Url.ActinLink,但我如何在其中传递PId?好的,好的,所以您只需要Url.Actionlink的重载。请查看以下答案:。干杯