在mvc中检查模型是否为空

时间:2017-02-17 13:02:57

标签: c# asp.net-mvc razor asp.net-core asp.net-core-mvc

我正在尝试检查模型是否为空或不是,但我无法解决问题。 渲染主视图时,我已将部分视图渲染如下

主视图

<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">
                    &times;
                </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);
}

对此有任何帮助表示赞赏!

2 个答案:

答案 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参数中传递什么值,所以我在那里放置了占位符。你需要在那里放置适当的值。