0

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

我有一个 ToDoList 控制器,在 .cshtml 中我有这个代码,点击 Info 链接。

 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");
        }

它永远不会去那里,而是去另一个控制器。我似乎无法找到它们是如何链接的,为什么它不返回到 Info 链接按钮所在的控制器,即返回 ToDoList 控制器。

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

4

1 回答 1

0

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

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

从这个开始:将您的链接更改为使用表单或 JavaScript。只需将其设为链接即可。如果是文本,你可以使用@Html.ActionLink()甚至传入你需要的参数。

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

如果您尝试访问的控制器可以访问任何TSSessionService内容,那么您不需要通过TempData["pass"]您尝试通过的控制器,因此它也可以通过这种方式使其更清洁。

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

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

于 2012-07-10T16:30:06.103 回答