Метод Jquery .post отправляет нулевое значение. Как передать фактическое значение контроллеру?

#c# #jquery #asp.net-mvc

#c# #jquery #asp.net-mvc

Вопрос:

У меня есть контроллер, который применяется к представлению редактирования в asp.net MVC. У меня есть actionlink, который отправляет идентификатор строки контроллеру, который затем возвращает правильную строку для просмотра в соответствующем представлении.

Затем у меня есть частичное представление ниже этого. Для этого также требуется параметр, чтобы вывести связанные данные из другой таблицы.

У меня есть вызов Jquery .post, который выполняется после загрузки страницы. Я могу предупредить и показать точное значение, которое я хочу отправить контроллеру.

    $(document).ready(function () {
        var url = "/Home/MmsAndNotes";
        var Uc = $("#Id").serialize();
        alert(Uc);
        $.post(url, {Id: Uc}, function (data) {
          alert("what is Uc now? "   uc); //just for testing
        });
    })
  

Я также использовал его таким образом.

 $(document).ready(function () {
        var url = "/Home/MmsAndNotes";
        var Uc = $("#Id").val();
        alert(Uc);
        $.post(url, Uc, function (data) {

        });
    })
  

появляются предупреждения и показывают значение, которое я хочу. Однако, когда выполняется вызов .post, он отправляет нулевое значение. Вот мой контроллер.

  public ActionResult MmsAndNotes(string Id)
    {
        //Declare LogisticsVM for individual policy info
        LogisticsMMS_NotesVM model;
        if(uc == null)
        {
            return Content("uc is empty.");
        }

        int val = Convert.ToInt32(uc);

        using (Db db = new Db())
        {
            LogisticsMMS_NotesDTO dto = db.LogisticsMMS.Find(val);

            //confirm policy exists
            if (dto == null)
            {
                return Content("This policy cannot be found."   val);
            }

            model = new LogisticsMMS_NotesVM(dto);
        }

        return PartialView(model);
    }
  

Он всегда возвращается, поскольку uc пуст. Я повторяю, когда появляются предупреждения. Я получаю правильное значение для отправки контроллеру. Но как только он отправляет, что-то происходит, и оно преобразуется в null. ПОМОГИТЕ, пожалуйста.. Я схожу с ума из-за этого.

Комментарии:

1. К сожалению, тот же результат.. Я тоже пробовал это.

2. Что, если вы $.post(url, {uc: "Test string"}, ...) это сделаете — вы получите что-нибудь?

3. Нет .. он по-прежнему отправляет значение null. У меня это как небольшой тест. if(uc == «Test String») { возвращает содержимое («uc — это тестовая строка.»); } Это в контроллере

4. Почему бы просто не использовать точки останова вместо написания тестов на основе кода? Например, в моем примере была «Тестовая строка», но вы тестируете «тестовую строку», которые не равны из-за чувствительности к регистру. Не уверен, что это имеет значение, но просто примечание. Также — что такое $("#Id") ? A <form> ?

5. Вы правы. Точки останова — гораздо лучшая идея. Я ужасно их использую и не могу понять, что я ищу таким образом. Итак, код, основанный на этом, работает нормально. Я прописал тестовую строку в проверке. Я даже сократил его «Тест», он все равно возвращается нулевым.

Ответ №1:

Я не знаю почему, но изменение моего вызова $.post() на вызов $.ajax({}) решило проблему. Как вы можете видеть выше, у меня был вызов $.post . Используя это вместо,

  $.ajax({
            type: "POST",
            url: "/Home/MmsAndNotes",
            dataType: 'text',
            data: { Id: Uc }
        });
  

Решил это. Я думал, что сокращенные вызовы Jquery работают так же. Они, конечно, могли бы, но делать это таким образом, было единственным способом, которым это сработало для меня.

PS Спасибо Тайлеру (выше) за ваши комментарии.

Ответ №2:

это решение должно работать :

     $(document).ready(function () {
            $.ajax({
        url: '/Home/MmsAndNotes',
        type: 'GET',
        dataType: "html",

        data: { uc : $("#Id").val() }, 
     success: function (result) { 
         code here
                               }
    });
        })
  

Вам нужно проверить, не является ли $(«#Id»).val() пустым

Комментарии:

1. Если бы значение было пустым, результатом была бы не null пустая строка.

2. можете ли вы объяснить больше?

3. Если .val() бы оно было пустым, оно было бы установлено в "" (пустая строка). "" и null не совпадают. Код OP подтверждает, что значение равно null .