2016-08-22 5 views
1

私はASP.NET MVCビューでJqueryデータテーブルを持っています。列はこのようなものです:ここでタイトル欄のasp.net mvcのJquery datatableから匿名オブジェクトのようなデータを渡す方法

"columns": [ 
         { "data": "Vote", "autoWidth": true }, 
         { "data": "Answer1", "autoWidth": true }, 
         { "data": "View", "autoWidth": true }, 
         { 
          "data": "Title", "autoWidth": true, 
          'render': function (Title) 
          { 
           //return '<a href=' + Title + '>' + Title + '</a>'; 
           return '<a href=/Questions/GoForAnswer/?idForAnswer='+ 2+'&title=dfg&question=dfg&view=59&date=08%2F10%2F2016%2023%3A39%3A17&answerNumber=13&vote=113>' + Title + '</a>'; 
          } 
         } 
       ] 

、私はハード、これらのオブジェクトは動的でobjects.Butの束を返すURLをコード化しています。これらをクエリ文字列に送りたいと思います。私がこのように送信したように:

@Html.ActionLink(item.Title, "GoForAnswer", new { idForAnswer = item.ID, title = item.Title, question = item.Question, view = item.View, date = item.Date, answerNumber = item.Answer1, vote = item.Vote }) 

Jquery関数からオブジェクトを送信するにはどうすればよいですか?あなたは何ができるか

答えて

0

は、あなたのオブジェクトの例と同じ名前のモデルを作成することができます:

public class PeopleObject 
{ 
    public string name {get;set;} 
    public int age  {get;set;} 
} 

は、あなたがしなければならないすべては、同じ名前の例であなたのjqueryのオブジェクトを作るです:

var uniqueObjectName = [{name:'example1',age:20},{name:'example2',age:30}];  // #1 
    $.ajax({ 
     type: 'POST', 
     data: uniqueObjectName , // #2 
     url: '/Home/SubmitMyData', 
     //contentType: 'application/json', #3 
     //dataType: 'json', #2 
     success: alert('Youhou'), 
     error: alert('not good') 
    }); 
var uniqueObjectName = [{name:'example1',age:20},{name:'example2',age:30}]; 

は、そのあとはあなたにjQueryオブジェクトは、AJAXを有するコントローラとAjaxの可変例としてオブジェクトを渡す送りますあなたの中に

のようなオブジェクトを受け取るコントローラ:コントローラが自動的に

+0

しかし、あなたの解決策としての正確な名前はわかりません。私はこのようなハードコードはできません。 new {name where title = title、age where title = title} 私はhtml.actionlink()で渡すときに匿名オブジェクトを渡す必要がありますか? –

0

より良いモデルにオブジェクトをマッピングします

public ActionResult Index(PeopleObject uniqueObjectName) 
{ 
    return View(); 
} 

コントローラのパラメータ名とjqueryの変数名が同じで予告... $.ajaxに直接urlを渡すのではなく、別の方法でクエリを作成し、必要に応じて変更してください。 本質的には、@Html.RouteUrlメソッドのかみそり生成URLをJavaScript変数に保存します。次に、クエリ文字列を追加します。

この場合、クエリ文字列には動的値が含まれているため、プレースホルダ変数にリストされている必要があるすべてのリクエストにリストされないものもあり、それに従って値を置き換えます。

これを実行した後は、クエリ文字列をベースURLに追加して$.ajaxに入力するだけです。

次の例を見てください(実際に動作するには、フィドルリンクが含まれています)。生成されたURL @Route.Urlurl変数に格納します。私はまたkeysテーブルのモデルのすべてのキーを宣言し、同様に値を置き換えるためにplaceholder文字列を定義しました。

(値はその特定のプロパティに設定されていない場合)、私はちょうど私の dataオブジェクト(そこから、あなたの動的な値を取得する)または空の値を持つすべての {key}=${placeholder}出現を置き換える fixPlaceholder方法で

最後に、urlplaceholderを追加して$.ajaxに渡します。あなたのようなものを持つことができ、あなたのクライアントコードについては

[HttpGet] 
public JsonResult GetModelAction(SampleViewModel model) { 
    // Your code here... 
} 

:バインドするASP.NET MVC側にその魔法を行いますので、この例のように複雑なオブジェクトを、期待して、ちょうど通常、コントローラのアクションを宣言し、そのことについて心配しないでくださいこの:

function fixPlaceholder (keys, data, placeholder) { 
    for(var i = 0; i < keys.length; i++) { 
     placeholder = placeholder.replace(keys[i] + "=${PLACEHOLDER}", keys[i] + "=" + (data[keys[i]] || "")); 
    } 

    return placeholder; 
} 

$(function(){ 
    $("button").on("click", function() { 
     var keys = ["Title", "Question", "AnswerNumber", "View", "Date", "Vote"]; 

     var data = {Title:"Myitle", Question:"MyQuestion", Vote:"10"}; 

     var placeholder = "?Title=${PLACEHOLDER}&Question=${PLACEHOLDER}&AnswerNumber=${PLACEHOLDER}&View=${PLACEHOLDER}&Date=${PLACEHOLDER}&Vote=${PLACEHOLDER}"; 

     var url = '@Url.RouteUrl(new{ action="GetModelAsJson", controller="Home"})'; 

     placeholder = fixPlaceholder(keys, data, placeholder); 

     url = url + placeholder; 

     $.ajax({ 
      url: url, 
      type: "GET", 
      contentType: "application/json; charset=utf-8" 
     }).then(function(resp) { 
       console.log("Response"); 
       console.log(resp); 
     }); 
    }); 

ここではそれをチェックし、それに基づいてあなたのように動作するようにしようと、dotnetfiddleです。お役に立てれば。

あなたは、すべての要求にモデルに設定されていない可能性があります値を使用して、彼らがヌルであるかもしれない意味しているので、あなたはあなたのバックエンドモデルに注意を払う必要があります。つまり、intDateTimeなどのタイプのプロパティがある場合は、毛むくじゃらの状況を避けるために、nullableとしてマークする必要があります。以下のモデルのように。

+0

コードと情報をありがとう。 varデータには静的フィールドが含まれています。そのような:タイトル: "Myitle"、質問: "MyQuestion"。私はここでクエリを生成する必要があります。 Like:タイトル: "Myitle"、質問:title = MyTitleの質問を選択します。それをしてもいいですか? –

関連する問題