2015-06-26 4 views
-1

Я пытаюсь отправить строку в свой ActionResult в контроллере. Я следил за многими учебниками и читал сотни стековых потоков, но не мог заставить его работать. Я пытаюсь отправить строку со значением радиоблока.Отправка строки в ActionResult с помощью ajax

Мой ActionResult код:

[HttpPost] 
    public ActionResult Opslaan(string theStatus) 
    { 
     if(theStatus!= null) 
      Database.UpdateAanvraagStatusByGuid(Session["Guid"].ToString(), theStatus); 
     return new RedirectResult(Request.UrlReferrer.OriginalString); 
    } 

Мой код, чтобы отправить переменную с помощью AJAX:

$("#opslaan").click(function (e) { 
    e.preventDefault(); 

    var theStatus = $('input[name=StatusOptions]:checked').val(); 

    $.ajax({ 
     type: "POST", 
     url: "/Aanvraag/Opslaan", 
     data: theStatus, 
     success: function (result) { 
      if (result.Success) { 
       alert("Uw wijzigingen zijn opgeslagen."); 
      } else { 
       alert(result.Message); 
      } 
     } 
    }); 
}); 

Когда я нажимаю мой кнопка называется "opslaan" программа не выполняет тэ AJAX. Оповещения вокруг него уходят.

Заранее спасибо :)

+0

Вы проверили вкладку консоли или сети своих инструментов браузера, чтобы получить дополнительную информацию об этой проблеме? – br4d

+0

@ br4d вкладка в сети говорит, что она отправляет что-то, но это 404's –

+1

Используйте 'data: {theStatus: theStatus},' –

ответ

2

Править Фабио так:

$("#opslaan").click(function (e) { 
e.preventDefault(); 

var theStatus = $('input[name=StatusOptions]:checked').val(); 

$.ajax({ 
    type: "POST", 
    url: "/Aanvraag/Opslaan?theStatus= " + theStatus , 
    //data: { 'theStatus': theStatus } , 
    success: function (result) { 
     if (result.Success) { 
      alert("Uw wijzigingen zijn opgeslagen."); 
     } else { 
      alert(result.Message); 
     } 
    } 
    }); 
}); 

Обратите внимание на строку запроса в конце собственности URL. Даже если строка IS является нулевым типом, если у вас нет какой-либо конфигурации маршрута, такой как «/ Aanvraag/Opslaan/theStatus», система маршрутизации не найдет соответствия.

Есть несколько вещей, чтобы отметить здесь:

  • Ваше оригинальное решение DID показать предупреждение, это означает, что запрос пошел на сервер, и ответ прибыл.
  • Ответ Fabio не работает, потому что вы (как я полагаю) не имеют никакого маршрута, как "/Aanvraag/Opslaan/theStatus". Несмотря на то, что string является типом с нулевым значением - поэтому система маршрутизации позволит параметру строки не иметь входящего значения из запроса - параметр url, заданный клиентом, сказал системе маршрутизации «Эй, пожалуйста, перешлите меня к чему-то, что настроено на URL-адрес например «/ Aanvraag/Opslaan/theStatus». Я уверен, что у вас нет какого-либо маршрута, настроенного с помощью этого шаблона, поэтому система маршрутизации не сможет найти подходящую пару методов Controller/Action, которая приведет к 404.
  • Ваше первоначальное решение не вызвало этой проблемы, потому что вы отправили параметр theStatus в качестве данных, а ваш url был «/ Aanvraag/Opslaan». Это означает, что даже маршрут по умолчанию сможет узнать, что контроллер «Aanvraag», а контроллер - «Osplaan». С тех пор модель Binding смогла связать ваш параметр theStatus с параметром метода действия. (Если бы это не так, можно было бы вызвать правильный метод действия, только с значением null, заданным параметру.) Однако ваш ответ не отправил объект с свойством Success назад, поэтому ваш оператор if отправился в else филиал.

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

Для заявления if на работу вам необходимо отправить обратно то, что имеет свойство Success, как это сделал Фабио.

+0

Спасибо, но это все еще не работает. Я буду принимать его как ответ, чтобы другие люди тоже его читали, но я сдаюсь. : D –

+0

Редактируйте сообщение и добавьте текущее состояние как вашего метода действий, так и клиентского вызова. –

0

Это может быть полезно:

[HttpPost] 
    public ActionResult Opslaan(string id) 
    { 
     if(id != null) 
      Database.UpdateAanvraagStatusByGuid(Session["Guid"].ToString(), id); 
     // do your logic to check if success is true or false 
     return Json(new { Success = true, Message = "something" }); 
    } 

Javascript:

$("#opslaan").click(function (e) { 
    e.preventDefault(); 

    var theStatus = $('input[name=StatusOptions]:checked').val(); 

$.ajax({ 
    type: "POST", 
    url: "/Aanvraag/Opslaan/ " + theStatus , 
    //data: { 'theStatus': theStatus } , 
    success: function (result) { 
     if (result.Success) { 
      alert("Uw wijzigingen zijn opgeslagen."); 
     } else { 
      alert(result.Message); 
     } 
    } 
}); 
}); 

EDIT

Просто, чтобы увидеть, если он работает, изменить имя параметра в Action и Javascript. Ответ

+0

То же самое происходит, почта отправляется, но 404. –

+0

Я отредактировал ответ, пожалуйста, взгляните. –

+0

Должен ли параметр string id не называться Status? –