我正在尝试检查模型是否为空或不是,但我无法解决问题。 渲染主视图时,我已将部分视图渲染如下
主视图
<div class="modal fade" id="surveyPreviewModal" data-backdrop="static" data-keyboard="false" tabindex="-1" role="dialog" aria-labelledby="surveyPreviewLabel" aria-hidden="true">
<div class="modal-lg modal-dialog">
<div class="modal-content" id="surveyPreviewContent">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
×
</button>
<h4 class="modal-title" id="surveyPreviewLabel">Survey Preview</h4>
</div>
<div class="modal-body" id="surveyPreviewBody">
@Html.Partial("_surveyPreview")
</div>
</div>
</div>
</div>
在局部视图中我的功能如下
@model LMS_TraineeSurveyPaginationViewModel
<script type="text/javascript">
function SurveyPreview(){
var surveyQuestionViewModel = @Html.Raw(Json.Serialize(Model.SurveyQuestionsViewModel.ToArray()));
var surveyQuestionOptionChoideViewModel= @Html.Raw(Json.Serialize(Model.SurveyQuestionOptionChoiceViewModel.ToArray()));
$.post('@Url.Action("SurveyPreview", "Survey")', { SurveyID : surveyID,` page : page },
function (data) {
$('#surveyPreviewBody').html('');
$('#surveyPreviewBody').html(data);
SetProgressBar(page,'@(Model==null?0: Model.Pager.TotalPages)');
}).fail(function () {
alert("error in GetTraineeSurvey");
}).success(function () {
});
}
</script>
因此,当在此函数(SurveyPreview)中渲染局部视图时,它会给出错误,因为模型为空并且显示了直接的白色屏幕。如果我还没有调用局部视图中的函数,那么为什么要检查模型是否为空?它应该是每当我按下按钮点击执行功能时?
我在主视图上有一个按钮,我在这里显示了引导模式,并在&#39; show
&#39; bootstrap modal的方法我再次返回相同的局部视图来绑定ajax调用中的数据。
下面的代码是用局部视图写的
$(document).ready(function () {
$('#surveyPreviewModal').on('show.bs.modal', function (e) {
surveyID = $(e.relatedTarget).attr('data-surveyID');
SurveyPreview(@SurveyPageTypePageNumber.StartPage,null);
});
})
并在控制器中
public ActionResult SurveyPreview(int SurveyID, int page)
{
------ some code ------
return PartialView("_SurveyPreview",viewModel);
}
对此有任何帮助表示赞赏!
答案 0 :(得分:1)
使用@ Html.Partial(“_ surveyPreview”)加载部分视图时,需要传递未提供的LMS_TraineeSurveyPaginationViewModel
因此,要调用部分视图,您需要编写类似
的内容@Html.Partial("_surveyPreview",new LMS_TraineeSurveyPaginationViewModel());
答案 1 :(得分:1)
部分视图需要类型为"05/15/2016"
的模型。但是,在从主视图渲染部分视图时,您没有传递任何模型对象。
在partialview DateTime.strptime('05/15/2017', '%m/%d/%Y')
#=> #<DateTime: 2017-05-15T00:00:00+00:00 ((2457889j,0s,0n),+0s,2299161j)>
中使用Model的属性。由于您没有从主视图传递任何模型对象,因此模型在局部视图中为空。这就是你看到LMS_TraineeSurveyPaginationViewModel
的原因。
因此,您需要确保部分视图获得模型。
您需要采用不同的方法来渲染局部视图。您可以使用function SurveyPreview()
调用Action方法,该方法将返回局部视图并在主视图中呈现。
在主视图中替换以下行
NullReferenceException
与
Html.Action
这样我将使用提供的参数调用控制器的@Html.Partial("_surveyPreview")
动作,它将返回带有模型的局部视图,并将被渲染。
我不确定要在@Html.Action("SurveyPreview", new { SurveyID = "<<somesoveryId>>", page = "<<somepage>>"})
和SurveyPreview
参数中传递什么值,所以我在那里放置了占位符。你需要在那里放置适当的值。