2017-02-17 13 views
0

Я пытаюсь проверить модель null ИЛИ нет, но я не могу решить проблему. Оказывая основной вид я вынес частичный вид следующимПроверка модели пустая или нет в 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> 

Таким образом при рендеринге парциальное view в этой функции (SurveyPreview), она дает ошибку, поскольку модель имеет нулевой и прямой белый экран. Если я не вызвал функцию, которая находится внутри частичного представления, то почему она проверяет, является ли модель нулевой ИЛИ нет? это должно быть, когда я выполняю функцию, например, при нажатии кнопки?

У меня есть кнопка на главном экране, откуда я показываю bootstrap modal и 'show' метод 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

Вы назначаете экземпляр 'viewmodel' в контроллере? то есть 'viewmodel = new viewmodel();'? –

+0

@ BarryO'Kane Да .. как этот 'вар ViewModel = новый LMS_TraineeSurveyPaginationViewModel() { SurveyQuestionsViewModel = SurveyQuestionsViewModel.Where (х => x.PageNumber == pager.CurrentPage) .ToList(), SurveyQuestionOptionChoiceViewModel = SurveyQuestionIDsOptionChoice, Pager = pager }; ' – Rohit

+0

Хорошо, и когда вы отлаживаете, вы можете увидеть экземпляр, если вы наведете над' viewmodel' после его создания? –

ответ

1

при загрузке Частичный вид с помощью @ Html.Partial («_ surveyPreview») это требуется LMS_TraineeSurveyPaginationViewModel быть переданы, которые не входят в комплект

так назвать Частичный вид вам нужно написать что-то вроде

@Html.Partial("_surveyPreview",new LMS_TraineeSurveyPaginationViewModel()); 
+0

да .. пробовал этот путь и решил проблему. Благодаря ! – Rohit

1

Частичный вид предполагает модель типа LMS_TraineeSurveyPaginationViewModel. Но вы не передаете какой-либо объект модели при рендеринге частичного просмотра из основного представления.

В частичном просмотре function SurveyPreview() используются свойства модели. Поскольку вы не передаете какой-либо объект модели из основного представления, модель возвращается в частичном представлении null. Вот почему вы видите NullReferenceException.

Поэтому вам нужно убедиться, что частичный вид получает модель.

Вам нужно сделать другой подход, чтобы отобразить частичный вид. Вы можете использовать Html.Action, чтобы вызвать метод Action, который будет возвращать частичный вид и рендеринг в главном представлении.

Заменить следующую строку в главном окне

@Html.Partial("_surveyPreview") 

с

@Html.Action("SurveyPreview", new { SurveyID = "<<somesoveryId>>", page = "<<somepage>>"}) 

Таким образом, я буду называть SurveyPreview действие контроллера с предусмотренными параметрами и возвращает частичный вид с моделью и это будет оказано.

Я не уверен, какие значения должны быть переданы в параметрах SurveyID и page, поэтому я разместил там заполнители. Вам нужно поместить соответствующие значения.

+0

Спасибо за помощь! – Rohit