2014-09-22 2 views
1

Я пытаюсь, как говорится в заголовке, вернуть Json-сообщение от контроллера к представлению после его проверки.Возврат данных Json от контроллера для просмотра ASP.NET MVC

Я сделал точку останова, и я знаю, что код работает со стороны контроллера, и что мой JavaScript с успехом называет ActionResult сейчас. Как отобразить это сообщение в представлении?

Есть две кнопки, печать и штамп. Если пользователь печатает дважды, он должен получить сообщение, то же самое с печатью. У меня есть два ActionResults, которые являются indentical, кроме некоторых сообщений и изменений строки.

Контроллер:

[HttpPost] 
    public ActionResult CreateStamp(Stamping stampingmodel) 
    { 
     var validateMsg = ""; 
     stampingmodel.Timestamp = DateTime.Now; 
     stampingmodel.StampingType = "in"; 

     if (stampingmodel.User == null || ModelState.IsValid) 
     { 
      var idValidated = db.Users.Find(model.UserId); 

      if (idValidated != null) 
      { 
       var stamp = 
        db.Stampings.Where(s => s.UserId == stampingmodel.UserId) 
         .OrderByDescending(s => s.Timestamp) 
         .FirstOrDefault(); 

       if (stamp.StampingType == stampingmodel.StampingType) 
       { 
        if (stampingmodel.StampingType == "in") 
        { 
         validateMsg = "Stamped Twice In A Row!"; 
        } 
       } 

       else 
       { 
        if (stampingmodel.StampingType == "in") 
        { 
         validateMsg = "Stamped In, Welcome."; 
        } 
       } 
      } 

      db.Stampings.Add(stampingmodel); 
      db.SaveChanges(); 
     } 

     return Json(new {Message = validateMsg }); 

JavaScript:

$(document).ready(function() { 

$("#stampInBtn").click(function() { 

    var userId = $("#userId").val(); 

    $.ajax({ 
     url: "ComeAndGo/CreateStamp", 
     type: "POST", 
     dataType: "json", 
     data: { 
      userId: userId, 
     } 
    }); 

}); 

Вид:

<input type="text" id="idUser" class="form-control" /> 
    <br /> 
    <input type="submit" value="IN" id="stampInBtn" /> 

У меня есть больше кода внутри Вид конечно; divs, head, body, title и scripts. Но это, пожалуй, немного неуместно.

Что делать, чтобы успешно показывать эти сообщения?

С уважением.

+0

Добавить функцию успеха. '$ .ajax ({....., success: function (data) {...' (где значение данных будет тем, что было возвращено сервером) –

+0

Я не понимаю, не могли бы вы уточнить, пожалуйста? – Qvadriologic

ответ

1

Добавить функцию успеха на вызов Ajax

$.ajax({ 
    url: "ComeAndGo/CreateStamp", 
    type: "POST", 
    dataType: "json", 
    data: { userId: userId }, 
    success: function(data) { 
    // data contains the value returned by the server 
    console.log(data); 
    }  
}); 

Таким образом, если контроллер возвращает

return Json("This is a message"); 

значение data будет be "Это сообщение". Обратите внимание, что возвращаемое значение может быть сложным или частичным.

+0

поэтому мои сообщения должны быть записаны в переменной данных? – Qvadriologic

+0

Так как мой контроллер делает: return Json (new {Message = message}); данные на JS автоматически будут моей переменной Message на контроллере? – Qvadriologic

+0

Я не уверен, почему вы используете 'return Json (new {Message = validateMsg});'? Это может быть просто 'return Json (validateMsg);' тогда значение данных будет 'validateMsg', но с вашим кодом я подозреваю, что вам нужно использовать' data.Message' для получения значения 'validateMsg' –

0

Вы получаете значение $("#userId"), но ваш ввод имеет идентификатор idUser.

Попробуйте сделать свой вклад:

<input type="text" id="userId" class="form-control" /> 

Кроме того, было бы хорошей идеей, чтобы обеспечить вашу модель структуры Stamping, как это кажется, что вы только передать идентификатор пользователя в вашем посте и больше ничего.

+0

изменил его, все еще не работает ... – Qvadriologic

+0

Является ли ваша точка останова удачной, когда вы запускаете код? –

+0

на стороне контроллера да, не знаю о js, хотя – Qvadriologic

0

Измените яваскрипта код следующим образом:

  $(document).ready(function() { 

     $("#stampInBtn").click(function() { 

     var userId = $("#userId").val(); 

      $.ajax({ 
       url: "ComeAndGo/CreateStamp", 
       type: "POST", 
       dataType: "json", 
       data: { 
        userId: userId, 
       }, 
       success: function(data) { 
       var objData= jQuery.parseJSON(data); 
       alert(objData.Message); 
       }, 
       error: function (request, status, error) { 
        alert(request.responseText); 
       } 

      }); 

     }); 
    }); 
+0

Я реализовал ее, все еще не работая, на экране ничего не появляется, независимо от того, сколько раз я нажимаю на эти кнопки. – Qvadriologic

+0

Неужели ваш отладчик накладывает на контроллер? –

+0

Да, он попадает на результаты action, и я получаю сообщение json правильно, но мне просто нужно отобразить его на экране, чтобы пользователь мог видеть изменения! – Qvadriologic

Смежные вопросы