[英]C# ASP.net MVC4 How to get Main View Control Values from a Partial View ActionResult
[英]Model values not carrying into partial view from main view- C# MVC
我已經難過幾天了。
我有一個包含renderpartial視圖的索引頁。 一個視圖模型從其控制器傳遞到索引頁面,然后從index.cshtml內部傳遞給擴展部分視圖。 renderpartial視圖每10秒自動更新一次(通過jquery函數從索引頁到控制器)以更新其內容,效果很好。 索引頁面包含多個復選框,用於過濾renderpartial視圖的內容。 當在經過一段時間后調用初始renderpartial視圖時,就會出現問題,該renderpartial視圖的控制器沒有索引控制器先前擁有的正確模型數據。 當我們進入renderpartial視圖時,模型中在索引控制器中設置為true的布爾值現在為false。 讓我們開始...
我的索引視圖:
@model SelfServe_Test2.Models.NGTransCertViewModel
...
<div class="Services_StatusTable" id="refreshme">
@{
Html.RenderPartial("_Data", Model);
}
</div>
...
@Html.CheckBoxFor(m => m.NGTransServicesModel.filter_NJDVSVR24, new { onclick = "test(id)" }) @Html.Label("NJDVSVR24", new { })
...
<script src="~/Scripts/jquery-1.12.4.js"></script>
<script type="text/javascript">
$(function () {
setInterval(function () { $('#refreshme').load('/NGTransCertServices/Data'); }, 10000); // every 10 seconds
function test(filter) {
alert(filter);
var serviceChecked = document.getElementById(filter).checked;
$.ajax({
type: "POST",
url: "/NGTransCertServices/ToggleVisibleService",
data: { 'filterOnService': filter, 'serviceChecked': serviceChecked, 'model': @Model },
//success: function (result) {
// if (result === "True")
// alert("yup");
// else
// alert("nope");
//}
});
}
</script>
PartialView _Data.cshtml:
@model SelfServe_Test2.Models.NGTransCertViewModel
...
<table>
foreach (var item in Model.NGTransServicesList)
{
if (Model.NGTransServicesModel.filter_EBT == true)
{
if (item.Description.Contains("EBT"))
{
}
}
}
</table>
我的ViewModel:
namespace SelfServe_Test2.Models
{
public class NGTransCertViewModel
{
public NGTransCertViewModel()
{
NGTransServicesModel = new NGTransCertServicesModel();
NGTransServicesList = new List<NGTransCertServicesList>();
NGTransServices = new NGTransCertServices();
}
public NGTransCertServicesModel NGTransServicesModel { get; set; }
public List<NGTransCertServicesList> NGTransServicesList { get; set; }
public NGTransCertServices NGTransServices { get; set; }
}
}
控制器:
public class NGTransCertServicesController : Controller
{
NGTransCertViewModel NGT_VM = new NGTransCertViewModel();
NGTransCertServicesModel certServicesModel = new NGTransCertServicesModel();
public ActionResult Index()
{
NGTransCertServices certServices = new NGTransCertServices();
NGT_VM.NGTransServicesModel = certServices.InitServiceTypeCheckBoxes(certServicesModel); // sets all checkboxes to true initially.
return View(NGT_VM);
}
[OutputCache(NoStore = true, Location = System.Web.UI.OutputCacheLocation.Client, Duration = 10)] // in seconds
public ActionResult Data()
{
NGTransCertDBHandle certDBHandle = new NGTransCertDBHandle();
List<NGTransCertServicesList> List_certServices = certDBHandle.GetService();
return PartialView("_Data", NGT_VM);
}
}
最后,丟失值的模型:
public class NGTransCertServicesModel
{
...
public bool filter_NJDVSVR24 { get; set; }
...
}
現在,當調用Index.cshtml頁面時,我運行InitServiceTypeCheckBoxes方法,該方法將復選框的值設置為true,將viewmodel傳遞給索引頁面,並將該模型傳遞給renderpartial。 所有人都感到高興,直到達到10秒超時並呈現_Data.cshtml。 復選框值現在全部為false。
讓我添加一個視覺元素。 下面是從控制器返回到索引視圖時的模型,布爾值根據需要設置為true。 (逐步執行)
現在,在控制器的“數據”操作中有一個斷點,該布爾值現在為false
即使在Data操作中的第一行代碼之前,布爾值也沒有真實值。
NGTransCertDBHandle certDBHandle = new NGTransCertDBHandle();
我認為問題是您沒有在控制器的Data
方法中正確填充視圖模型。
在這兩種方法中,您都將NGT_VM
屬性發送到視圖,但僅填充Index
方法中的某些數據-調用Data
方法時,默認情況下不會保留或創建此Data
。
每次請求命中某個控制器方法時,都會重新創建該控制器,並且僅調用構造函數和請求的方法。 在創建對控制器的Data
請求的情況下, NGT_VM
屬性設置回默認的NGTransCertViewModel
對象,並使用默認的NGTransCertServicesModel
對象(布爾屬性filter_NJDVSVR24
將默認設置為false
)。 然后,您創建並忽略了變量List_certServices
,但是您NGTransServicesModel
沒有更新視圖模型上的NGTransServicesModel
屬性以匹配您從Index
方法獲得的值。
你或許應該分配NGTransServicesList
變量的NGT_VM.NGTransServicesList
您填充后:
[OutputCache(NoStore = true,
Location = System.Web.UI.OutputCacheLocation.Client,
Duration = 10)]
public ActionResult Data()
{
NGTransCertDBHandle certDBHandle = new NGTransCertDBHandle();
List<NGTransCertServicesList> List_certServices = certDBHandle.GetService();
NGT_VM.NGTransServicesList = List_certServices;
return PartialView("_Data", NGT_VM);
}
您可以按照Data
方法的要求調用相同的方法來更新NGTransServicesModel
,但是我不確定這是否是您要NGTransServicesModel
的行為?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.