2012-06-26 1 views
0

입력 내용을 자동으로 내 beginform에 게시하려고하지만 해당 값이 모델이나 컨트롤러에 도달하지 않습니다. 그들은 null로 남아 있습니다 (중단 점은 결코 부딪치지 않습니다.) 무엇이 이것을 일으킬 수 있습니까?mvc 및 ajax - 모델 속성에 부딪히지 않음

@model project.Models.data 

JAVASCRIPT

function send() 
     { 
      $.ajax({ 
         type: 'POST', 
         url: this.action, 
         data: {'data1': $('#data1').val(), 
         'data2': $('#data2').val() }, 
         success: function (done) { 
       $('#box').html(done.output); 
      }); 
     } 

FORM

@using (Html.BeginForm()) 
{ 
<input id="data1" value="0" name="data1" onclick="send();" > 
<input id="data2" value="0" name="data2" onclick="send();" > 

} 

우선 모델

namespace projects.Models 
{ 
    public class data 
    { 
    public int data1{ get; set; } 
    public int data2 { get; set; } 
    } 

} 
+0

어떤 브라우저가 있습니까? IE의 경우 이것은 종종 캐싱 문제로 인해 발생할 수 있습니다. 걷어 찬 경우 Ajax 요청에 cache : false를 추가하고 다시 시도하십시오. – Shenaniganz

+0

또한 백그라운드에서 실행되는 Fiddler와 함께이 URL을 실행하고 URL이 맞았는지 확인하십시오. – Shenaniganz

+0

IE/Firefox/Chrome에서 작동하지 않습니다. 이미 캐시를 false로 설정하려고했습니다. 같은 문제. – user999690

답변

2

당신은 양식의 기본 이벤트를 취소 할 것 같지 않습니다. 난 당신이 양식의 .submit 이벤트에 가입하는 것이 좋습니다 마크 업 및 자바 스크립트 혼합 중지 할 것 :

$(function() { 
    $('form').submit(function() { 
     $.ajax({ 
      type: this.method, 
      url: this.action, 
      data: { 
       data1: $('#data1').val(), 
       data2: $('#data2').val() 
      }, 
      success: function (done) { 
       $('#box').html(done.output); 
      } 
     }); 

     // It is very important to return false in order to prevent the default action 
     return false; 
    }); 
}); 
:이 양식의 .submit 이벤트를 구독 할 수있는 별도의 자바 스크립트 파일에 다음

@using (Html.BeginForm()) 
{ 
    <input id="data1" value="0" name="data1" /> 
    <input id="data2" value="0" name="data2" /> 
} 

1

, 나는 onclick 속성을 사용하지 않는 것이 좋습니다. jQuery의 click 또는 on을 사용하면 훨씬 좋습니다.

두 번째로 Html.BeginForm()은 사용하는 방식으로 작동하지 않습니다. 컨트롤러 메소드를 사용하려면 히트하려고하는 컨트롤러 메소드의 값으로 제출 버튼이 있어야합니다. 당신이 jQuery를 (이다 AJAX를 사용하여) 비동기 방법을 맞추려고하는 경우

, 나는 여기에이 게시물을보고 추천 :

Send data with jquery to an MVC controller

필요하지 않은 서버에 게시 AJAX를 사용하는 경우 Html.BeginForm()입니다. 그러나 게시하고 다른 작업으로 리디렉션하려는 경우 Html.BeginForm()을 사용합니다.

이제 AJAX를 사용하지 않고 서버에 POST하려고하는 경우 Html.BeginForm()에 제출 버튼이 필요합니다. 이 기사에서는 등록 양식이 어떻게 작동하고 귀하의 상황에 적용될 수 있는지 자세히 설명합니다.

How does the MVC3 Controller retrieve HTTPPOST params?

+1

그냥 빨리 ... JQuery .live() 메소드가 더 이상 사용되지 않습니다. 사용해야 할 경우 .on() 대신 – Shenaniganz

+0

라고 부르면 좋은 답변입니다. Shenainganz는 답변을 업데이트 할 것입니다. –

관련 문제