2014-01-09 1 views
1

Ok поэтому у меня есть эта форма, на мой взгляд:Форма данных не отвечал на контроллер при использовании AJAX

<form id="MyForm"> 
<input type="text" name="myinput" /> 
<button type="submit" /> 
</form> 

У меня есть следующие Javascript в верхней части моей точки зрения, которая запускается при загрузке страницы:

<script type="text/javascript"> 
    $(document).ready(
     function() { 
      $("#MyForm").submit(
       function() { 
        var url = "Home/TestAjax"; 

        var dataToSend = $("#MyForm").serialize(); 
        alert(dataToSend); 

        $.ajax 
        (
         { 
          type: "POST", 
          url: url, 
          data: dataToSend, 
          success: function (data) { 
           alert(data); 
          } 
         } 
        ); 

        return false; 
       } 
      ); 
     } 
    ); 
</script> 

Форма правильная сериализация в ajax, что подтверждается полем предупреждения. Вот мой TestAjax метод контроллера:

[HttpPost] 
public string TestAjax(string data) 
{ 
    return !string.IsNullOrEmpty(data) ? "Success" : "Failure"; 
} 

Значение возвращается в противном случае, потому что AJAX не быть вывешенным назад. Что я здесь делаю неправильно?

Благодаря

+0

какая модель у вас есть? –

+0

Нельзя использовать какие-либо модели на данный момент, пытаясь разобраться в простое преобразование формы в JSON, отправив ее на контроллер и вернув значение. Вам нужно использовать модель? – JMK

+0

какое предупреждение показано здесь alert (dataToSend); –

ответ

6

Имя вашего входного поля myinput не data. Поэтому убедитесь, что вы последовательно назвали аргумент ваших действий, а также:

[HttpPost] 
public ActionResult TestAjax(string myinput) 
{ 
    return !string.IsNullOrEmpty(myinput) ? Content("Success") : Content("Failure"); 
} 

При использовании $("#MyForm").serialize() это вернет myinput=some_value где some_value, очевидно, значение, которое пользователь ввел в этом поле ввода.

И если у вас 2 поля ввода в вашей форме:

<form id="MyForm"> 
    <input type="text" name="foo" /> 
    <input type="text" name="bar" /> 
    <button type="submit" /> 
</form> 

вы бы, конечно, написать вид модели:

public class MyViewModel 
{ 
    public string Foo { get; set; } 
    public string Bar { get; set; } 
} 

, что ваши действия контроллера будет принимать в качестве параметра:

[HttpPost] 
public ActionResult TestAjax(MyViewModel model) 
{ 
    return !string.IsNullOrEmpty(model.Foo) ? Content("Success") : Content("Failure"); 
} 

Также обратите внимание, что в ASP.NET MVC-контроллере действия должны возвращать ActionResults, а не stri или что-то еще.

+0

Дарин и поймал, что снова;) –

+0

D'oh, я думал, что вся форма будет сериализована в одну строку JSON и передана как данные, очень спасибо! – JMK

+2

Я посмотрел примерно десять раз над кодом JS и C# и оставил HTML в сторону, но иногда HTML очень важен, как и остальные ... +1 – DontVoteMeDown

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