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 调用结果附加到<div class="contRfDetails"></div>
的代码。在ajax调用的成功部分,如果你把$('.contRfDetails').append(data);
【参考方案1】:
js 应该使用来自控制器的数据更新一个 html 元素。 更新脚本的行:
*success: function (data)
alert('Process Successful');
,*
到
success: function (data)
$('.contRfDetails').html(data);
,
【讨论】:
以上是关于MVC 部分视图已更新,但未在主视图中显示的主要内容,如果未能解决你的问题,请参考以下文章