C# 渲染局部视图时,它不会在具有实体框架的MVC中的父视图内部打开

C# 渲染局部视图时,它不会在具有实体框架的MVC中的父视图内部打开,c#,asp.net,asp.net-mvc,entity-framework,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,我刚刚开始使用Mvc框架,我想显示包含产品详细信息的部分视图。主视图包含用户将单击的产品名称,产品的详细信息将列在同一页面上,但我的部分视图将在新页面上打开,第一次加载页面时,默认情况下会显示第一个产品详细信息,我已经尝试了很多并看到了其他链接,但这个问题仍然存在。。请帮忙解决这个问题。下面列出了我正在使用的完整代码 HomeController.cs using System; using System.Collections.Generic; using System.Linq; using

我刚刚开始使用Mvc框架,我想显示包含产品详细信息的部分视图。主视图包含用户将单击的产品名称,产品的详细信息将列在同一页面上,但我的部分视图将在新页面上打开,第一次加载页面时,默认情况下会显示第一个产品详细信息,我已经尝试了很多并看到了其他链接,但这个问题仍然存在。。请帮忙解决这个问题。下面列出了我正在使用的完整代码

HomeController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using MvcFirstMVCApp.Models;

namespace MvcFirstMVCApp.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/
        AuthorContactEntities dbEntities = new AuthorContactEntities();
        public ActionResult Index()
        {
            return View(dbEntities.tbl_product.ToList());
        }

        public ActionResult PartialView(int id)
        {
            var query = dbEntities.tbl_product.First(c => c.ProductId == id);
            return PartialView("PartialView", query);
        }
    }
}
Index.cshtml

@model List<MvcFirstMVCApp.Models.tbl_product>
@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>

    <script src="@Url.Content("~/Scripts/jquery-1.5.1.js")" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("div.product a").click(function (e) {
                alert("clicked");
                var url = this.ref;
                $get(url, {}, function (data) {
                    $('div.productdetail').html(data);
                });
            });
            return false; 
        });
    </script>
</head>
<body>
    <div class="product">
        <ul class="list">
            @foreach (var item in Model)
            {
                <li><a href="@Url.Action("PartialView", "Home", new { id = item.ProductId })">
                    @item.ProductName</a></li>
            }
        </ul>
        <div class="productdetail">
            @{Html.RenderPartial("PartialView",Model.FirstOrDefault());}
        </div>
    </div>
</body>
</html>

这是预期的行为

您正在此处呈现指向操作方法的链接:

<li><a href="@Url.Action("PartialView", "Home", new { id = item.ProductId })">
                @item.ProductName</a></li>
  • 单击该按钮将使浏览器导航到您的操作方法,该方法将返回局部视图。该局部视图没有布局。您的视图似乎也没有布局

    这听起来很刺耳。。但是您应该重新访问您的MVC资源,重新阅读部分视图是如何工作的。它们不是神奇的动态加载视图。。如果这是您想要的,您需要研究AJAX

    $("div.product a").click(function (e) {
        var url = this.ref;
        $get(url, {}, function (data) {
            $('div.productdetail').html(data);
        });
        // Return here to prevent click event from opening new page
        return false;
    });
    
    通过单击锚定标记,您将打开一个新页面,该页面将呈现您的局部视图。您需要防止锚点的默认行为

    您可以添加
    返回false来做这件事。

    调用e.preventDefault();在onclick处理程序中:

    $("div.product a").click(function (e) {
                e.preventDefault();
                alert("clicked");
                var url = this.ref;
                $get(url, {}, function (data) {
                    $('div.productdetail').html(data);
                });
            });
    

    请看这篇文章。按照建议,在_布局中添加一行代码,为我解决了这个问题


    Post:

    我添加了return false,但它仍然重定向到一个单独的部分视图页面。使用e.preventDefault()不会显示产品详细信息,也不会重定向到另一个页面。请给我此类问题或教程的链接。。。谢谢你的回答
    $("div.product a").click(function (e) {
        var url = this.ref;
        $get(url, {}, function (data) {
            $('div.productdetail').html(data);
        });
        // Return here to prevent click event from opening new page
        return false;
    });
    
    $("div.product a").click(function (e) {
                e.preventDefault();
                alert("clicked");
                var url = this.ref;
                $get(url, {}, function (data) {
                    $('div.productdetail').html(data);
                });
            });