2016-12-14 17 views
2

すべての解決策/同様の質問はjsonオブジェクトと関係しています。私は問題がhtmlを使用することによって引き起こされるかもしれないと思う。また、データが空でないことを確認してから、ajaxコールにヒットします。ここでMVC:Ajaxデータがコントローラに到達しない

は、Ajax

function SubmitSearch() { 
    var type = $("#select_SearchType").val() 
    var query = $("#input_Search").val() 

    $.ajax({ 
     //url: "newSearch", 
     url: '@Url.Action("newSearch", "Results")', 
     type: 'POST', 
     cache: false, 
     dataType: "html", 
     contentType: 'application/html; charset=utf-8', 
     data: { type: type, query: query }, 
     success: function (ViewModel) { 
      alert(ViewModel) 
      $("#div_record").empty(); 
      $("#div_record").html(ViewModel) 
     }, 
     error: function (ViewModel) { 
      alert("error") 
      $("#div_record").empty(); 
      $("#div_record").html(ViewModel) 
     }, 
    }); 
} 

とアクション

[HttpPost] 
    public ActionResult newSearch(string type, string query) 
    { 
     switch (type) 
     { 
      case " ": 
       response.errMess = "empty data, T:" + type + " Q:" + query; 
       return PartialView("Record", response); 
      default: 
       response.errMess = "Error: mismatched fields, T:" + type + " Q:" + query; 
       return PartialView("Record", response); 
     } 

タイプとクエリから選択したコードの両方あなたはcontentType: 'application/html; charset=utf-8'を使用する必要はありません空

+0

はなぜ、あなたの 'のcontentTypeです:

あなたがPartialViewを返すようにしたい場合は、このようなdataType: "html"

何かを使用する必要はありません「アプリケーション/ htmlの。あなたが実際に 'application/x-www-form-urlencoded'を投稿しているときは、' charset = utf-8''ですか? * response *でHTMLを期待しているならば、 'dataType: 'html''で十分でしょう。 'contentType'は* request *によって使われます。 – haim770

+0

私は送信しているオブジェクトのタイプが単なるテキスト文字列であるので、それは正しいと考えました –

+0

ありがとうございました! –

答えて

2

に来ています。いくつかの方法があります。

$.ajax({ 
    //url: "newSearch", 
    url: '@Url.Action("newSearch", "Results")?type='+type+'&query='+query, 
    type: 'POST', 
    success: function (ViewModel) { 
     alert(ViewModel) 
     $("#div_record").empty(); 
     $("#div_record").html(ViewModel) 
    }, 
    error: function (ViewModel) { 
     alert("error") 
     $("#div_record").empty(); 
     $("#div_record").html(ViewModel) 
    }, 
}); 

第二:

まず、あなたは、この(urlでパラメータを直接置く)のようなものを使用する必要があります。 dataプロパティを使用して、一部のデータをサーバーに保存する必要があります。

$.ajax({ 
    //url: "newSearch", 
    url: '@Url.Action("newSearch", "Results")', 
    type: 'POST', 
    cache: false, 
    data: { type: type, query: query }, 
    success: function (ViewModel) { 
     alert(ViewModel) 
     $("#div_record").empty(); 
     $("#div_record").html(ViewModel) 
    }, 
    error: function (ViewModel) { 
     alert("error") 
     $("#div_record").empty(); 
     $("#div_record").html(ViewModel) 
    }, 
}); 
+0

アクションは 'PartialView'を返すので、OPはHTMLを正当に期待しています。 'dataType: 'json''を使うとそれを防ぐことができます。 – haim770

+0

はい、そうです。ありがとう。私はそのメソッドが 'partialView'を返すのを見ません。 –

関連する問題