MVC 部分视图已更新,但未在主视图中显示

Posted

技术标签:

【中文标题】MVC 部分视图已更新,但未在主视图中显示【英文标题】:MVC partial view updated but not showing in main view 【发布时间】:2016-05-23 13:13:43 【问题描述】:

我正在尝试在单击 ajax 按钮后在我的主视图中更新我的部分视图。我逐步浏览部分视图,模型具有正确的值。我将值存储在 html 中,以便它们显示在主视图中。不显示新值。我想知道是否有人可以帮助我。

查看模型:

namespace myApp.ViewModels

    public class mrfResult
    
        public string mrf  get; set; 
        public string round  get; set; 
        public string route  get; set; 
        public string supplier  get; set; 
        public string status  get; set; 
        public string deadline  get; set; 
    

控制器:

[HttpPost]
public ActionResult RFInfo(RfInfo pRfInfo)

  List<mrfResult> newResult = new List<mrfResult>();
.....
mrfResult nRow = new mrfResult();
nRow.mrf = pRfRow; nRow.round = pRfInfo.round; nRow.route = routeRow.ServiceId.ToString();nRow.supplier = supRow.name; nRow.status = statName; nRow.deadline = supRow.deadline.ToString();
newResult.Add(nRow);
.....
return PartialView("~/Views/RFMaster/_Partials/_GetRFDetails.cshtml", newResult);

局部视图:

@model List<myApp.ViewModels.mrfResult>

    <script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
    <script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>

    @section scripts 
        <script src="~/javascript/RFInfo.js"></script>
    
    <div>
        @            
            string routeName = "(a - b)";
            string servId = "";

            if (Model != null) 
                for (var i = 0; i < Model.Count; i++)
                
                    servId = Model[i].supplier;
                    break;
                                
            
        
        <span>@routeName</span><br />
        <span>@servId</span><br />
        <span>@routeName</span><br />
    </div>

主视图:

@model List<myApp.ViewModels.mrfResult>
    @
        Layout = "~/Views/Shared/_Layout.cshtml";
        

<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
<script src="~/Scripts/multi-select/multiple-select.js"></script>
<link href="~/Scripts/multi-select/multiple-select.css" rel="stylesheet" />
<link href="~/CSS/css_RFInfo.css" rel="stylesheet" />

@section scripts 
    <script src="~/Javascript/RFInfo.js"></script>

@
    int cnt = 0;

<body>
    <div>
        <h1>RF Information</h1>

        ............

        <div class="contRfDetails">
            @Html.Partial("~/Views/RFMaster/_Partials/_GetRFDetails.cshtml")
        </div>
    </div>
</body>

jQuery :

$(document).ready(function ()  
    $("#btnFind").click(function () 
        var getRf = $("#ddlRf").val();       
        var getRound = $("#ddlRnd").val();
        var getRoute = $("#ddlRte").multipleSelect('getSelects').toString();
        var getSupp = $("#ddlSup").multipleSelect('getSelects').toString();
        var getStat = $("#ddlStat").multipleSelect('getSelects').toString();

        var params = 
            'rf': getRf, 'route': getRoute, 'round': getRound, 'supp': getSupp, 'stat': getStat
        ;
        var json = JSON.stringify(params);
        $.ajax(
            url: "../RFMaster/RFInfo",
            type: "POST",
            data: json,
            cache: false,
            async: true,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            traditional: true,
            success: function (data) 
                alert('Process Successful');
            ,
            error: function () 
                alert("Error")   
            
        );
    );
); 

在第一次加载时在主视图中显示具有部分视图的div:

(a - b)

(a - b)

这是正确的。

按下“btnFind”按钮后,控制器 httppost 操作结果函数被触发。该模型是根据 jquery 参数填充的。然后将模型发送到局部视图。在局部视图中的模型上执行循环。检索其中一个值 (sup1) 并将其存储在变量“servId”中。然后将该变量分配在一个跨度“@servId”中。

主视图中的 div 现在应该如下所示:

(a - b)

sup1

(a - b)

但我得到的只是视图中的原始数据。

(a - b)

(a - b)

【问题讨论】:

我在任何地方都看不到将 ajax 调用结果附加到 &lt;div class="contRfDetails"&gt;&lt;/div&gt; 的代码。在ajax调用的成功部分,如果你把$('.contRfDetails').append(data); 【参考方案1】:

js 应该使用来自控制器的数据更新一个 html 元素。 更新脚本的行:

*success: function (data) 
            alert('Process Successful');
        ,*

success: function (data) 
           $('.contRfDetails').html(data);
        ,

【讨论】:

以上是关于MVC 部分视图已更新,但未在主视图中显示的主要内容,如果未能解决你的问题,请参考以下文章

选择器视图在选择器视图中显示数字但未在标签上正确显示?

API 已获取但未在 SwiftUI 中显示任何数据

MVC4如何在父视图单击提交时获取部分视图中的数据

Jquery 对话框未在 aspnet MVC 中加载

MVC 在同一视图中使用 where 子句显示不同的数据部分

MVC 中的单元测试视图 - 确认部分视图已执行