【问题标题】:MVC display partial view on navigation bar clickMVC在导航栏点击显示部分视图
【发布时间】:2014-08-26 09:39:55
【问题描述】:

我想显示局部视图,当我点击导航栏时点击。我有一个包含左侧菜单的视图。当用户单击导航栏项目时,应显示适当的视图。

我没有得到如何实现这样的视图?

Manage.cshtml

        <div class="row">
            <div class="col-xs-12">
                <div class="page-header">
                    <h1>My Account</h1>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-xs-3">
                <ul class="nav nav-pills nav-stacked nav-stacked-extended">
                    <li class="active">
                        <a id="A3" target="_self" runat="server" href="@Url.Action("Contactinfo", "Account")">Contact Info</a>
                    </li>
                    <li class="">
                        <a id="A4" target="_self" runat="server" href="@Url.Action("changePassword", "Account")">Password</a>
                    </li>
                </ul>
            </div>
            <div class="col-xs-9 ng-scope" data-ng-view="">
                <div class="row row-gap-medium ng-scope">
                    @Html.Partial("Contactinfo")
                </div>
            </div>
        </div>

在上面的代码中,当Manage.cshtml 第一次加载我想显示Contactinfo 视图时,我创建了左侧菜单,即联系信息、更改密码等。当用户点击密码菜单时,contactinfo 得到更改为changedpassword 页面。请检查以下屏幕截图。

在上图中,您可以看到左侧菜单和相应的页面。当用户单击密码时,我想要什么,视图更改为password page。目前它显示联系信息页面。我怎样才能做到这一点?

【问题讨论】:

    标签: javascript asp.net-mvc-4 partial-views razorengine


    【解决方案1】:

    我认为你应该通过 JavaScript 渲染部分内容。

    假设你有&lt;div id="partialView"&gt;&lt;/div&gt;

    那么你应该在用户点击链接时运行 Ajax 查询。

    类似:

    $.ajax({
                url: $(this).data('yourUrl'),
                type: 'GET',
                cache: false,
                success: function(result) {
                    $('#partialView').html(result);
                }
            });
    

    【讨论】:

    • 如何传递部分视图名称?当我点击不同的菜单选项时
    • 我建议在您的链接中使用 data-* 属性。像这样:'info' 然后在你的js中使用属性值。
    • 感谢您的回复。可以给我a 带有data-* 属性的标签吗?
    • 假设你有 link 那么你可以使用 获取属性值$(element).attr("data-id")$(element).data("id")
    【解决方案2】:

    我也花了一点时间才弄明白。

    本质上,您希望控制器操作返回一个局部视图,然后使用 Ajax 加载返回的局部视图。

    JavaScript/Ajax

    $.ajax({
                url: '@Url.Action("Action", "Controller")',
                type: 'POST',
                data: { 'viewName': 'password' },
                success: function (data) {
                    $('#partial-container').html(data);
                }
            });
    

    控制器返回类型

    Public ActionResult GetView(string viewName)
    {
        return PartialView(viewName, model);
    }
    

    理想情况下,更改您的 HTML,以便更轻松地引用您要加载部分的 div 容器

    <div class="col-xs-9 ng-scope" data-ng-view="">
                    <div class="row row-gap-medium ng-scope">
                        <div id="partial-container">@Html.Partial("Contactinfo")</div>
                    </div>
                </div>
    

    【讨论】:

    • 如何传递部分视图名称?当我点击不同的菜单选项时
    • 将它传递到 Ajax 请求的数据部分,我传递 'id',你可以传递视图名称。
    • 我已经更新了上面的代码以反映更改,因此您将 viewName 作为 ajax 请求的数据传入,然后控制器在响应中将该视图传回。跨度>
    • 假设我有&lt;a id="A4" target="_self" runat="server" href="@Url.Action("changePassword", "Account")"&gt;Password&lt;/a&gt;,当我点击它时,如何将 changePassword 作为视图名称传递?
    • 以不同的方式格式化你的href,就像一个字符串,然后你可以使用jquery从锚标签中获取值。因此,如果您将锚标记 href 更改为类似 href="Account/ChangePassword" 的内容,则 jquery 类似于 $('#A4').attr('href') 作为数据。
    【解决方案3】:

    在您的要求中,只需对左侧栏中的链接进行部分视图,当用户单击左侧栏中的特定选项时,只需使用 jquery 从 ajax 调用加载适当的部分视图,然后替换右侧的 html带有来自 ajax 调用的 html 的栏。

    为您的左侧菜单提供唯一 ID,然后:

    一个演示:

     $(document).ready(function(){
       $("#menu1").click(function(e){
          e.preventDefault();
          $.ajax({
                    url: "/MyController/getdata",
                    type: 'GET',
                    datatype: 'html',
                    data: {  },
                    success: function (data) {
                       $("#div1").html('');
                       $("#div1").html(data);
    
                });
        });
    });
    

    控制器(MyController):

    [HttpGet]
    Public ActionResult getdata(string dropval)
    {
    //bind model here
    return PartialView("mypartialview",model)
    }
    

    【讨论】:

    • 如何传递部分视图名称?当我点击不同的菜单选项时
    • 我认为您不需要使用 .html('') 清除当前内容,因为 .html(string) 完全替换了现有内容。
    • 假设我有&lt;a id="A4" target="_self" runat="server" href="@Url.Action("changePassword", "Account")"&gt;Password&lt;/a&gt;,当我点击它时,如何将 changePassword 作为视图名称传递?当页面首先加载时,它应该显示contactinfo 视图
    • @AjayPunekar..为什么使用runat服务器它的mvc而不是webforms并且使用锚标记只需调用一个函数然后如上所示进行ajax调用并在ajax调用中获取url as var url = $( this).attr('href')
    • 其实一开始我是在asp.net上开发这个网站的。所以我只是从asp.net复制了这个。这就是为什么你看到 runat
    【解决方案4】:

    为 Clickevent 尝试这个 JS

    $(document).on('click', '#anCalcBtn', function () {
    $('#anCalcDetail').load('/Home/Contactinfo/');
    });
    

    如果我没记错的话,你正在尝试像 This 那样做

    【讨论】:

    • 如何传递部分视图名称?当我点击不同的菜单选项时
    • 他们已经创建了母版页。我不想使用母版页。
    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    相关资源
    最近更新 更多