【问题标题】:ASP.NET MVC - Go to a different view without changing URLASP.NET MVC - 在不更改 URL 的情况下转到不同的视图
【发布时间】:2009-10-07 15:58:46
【问题描述】:

是否可以在不更改 URL 的情况下转到其他视图?例如,在我的索引视图中,我有一个链接可以转到详细信息视图,但我想保持 URL 不变。

非常感谢, 肯尼。

【问题讨论】:

标签: asp.net-mvc view routing


【解决方案1】:

如前所述,您可以将详细信息链接设为Ajax.ActionLink 并使用它来更改 div 的内容。

如果做不到这一点,我能想到的唯一其他方法是让您的详细信息链接一个按钮并将POST 链接到您的索引操作。您可以将 CSS 应用于按钮,使其看起来更像是一个普通的 html 链接。

public class HomeController : Controller {

   public ActionResult Index() {
      return View("Index");
   }

   [AcceptVerbs(HttpVerbs.Post)]
   public ActionResult Index(int hiddenInputFieldId) {
      return View("Details");
   } 
}

编辑:

根据 JonoW 的评论,您必须在帖子中传递一个“假”参数,但这并不是真正的问题,您可以使用隐藏的输入字段。

【讨论】:

  • 谢谢,我去看看Ajax.ActionLink。在这样做时,我需要在渲染详细信息之前隐藏索引内容,对吗?
  • 您指定一个目标 div 来更改内容,因此如果您的所有特定于 Index 操作的内容都在名为“main”的 div 中,则会立即被 Details 操作替换
  • 这不会编译,你的 2 个 Index() 方法签名是相同的,它们需要以某种方式区分。
【解决方案2】:

您可以从多个控制器操作返回相同的视图,但每个控制器操作都需要一个唯一的 URL:

public class HomeController : Controller {
    public ActionResult Index() {
        return View("home");
    }

    public ActionResult About() {
        return View("home");
    }
}

如果您希望链接在不更改 URL 的情况下从不同页面加载内容,则必须使用一些 Ajax 调用服务器以获取内容并使用新的内容更新需要更改的页面部分内容。

【讨论】:

    【解决方案3】:

    我不知道你为什么要这样做,但你可以有一个 Ajax.Actionlink 来呈现详细信息视图..

    几乎没有理由隐藏 URL,不确定您想做什么。也许您进一步解释一下,有人可以提供更好的方法。

    【讨论】:

    • 我有一个网站,客户可以使用其唯一 ID 访问该网站,例如 mysite.com/ABC123,然后它将在此 URL 中呈现索引页面。在此索引页面内容中,有一个指向详细信息页面的链接,他们可以在其中提交简单的表单。我基本上想保持 URL 不变,仅此而已。
    【解决方案4】:

    您可以为此使用旧的 Server.Transfer。但是,我建议像detailed in this SO post 那样做。这为您提供了一种从当前操作返回 ActionMethod 的简单方法,而无需在您的代码中到处使用 Server.Transfer()

    【讨论】:

    • 谢谢,我去看看那个帖子。
    【解决方案5】:

    你可以通过渲染部分来做到这一点——我这样做是为了加载不同的搜索屏幕。示例代码如下(这与我的实际代码略有不同,但你会明白的):

    <% Html.RenderPartial(Model.NameOfPartialViewHere, Model.SomeVM); %>
    

    不过,就我个人而言,我不明白您为什么不直接更改 URL?

    【讨论】:

    • 这只是客户的要求,我个人认为这也不是一个好主意。
    猜你喜欢
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多