2016-08-22 69 views
1

一個匿名對象如何通過數據我有我的ASP.NET MVC視圖jQuery的數據表。列是這樣的:像jQuery的數據表在asp.net mvc的

"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}]; 

在此之後,您發送jQuery對象給您Ajax控制器,並通過將對象作爲AJAX的變量例如:

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') 
    }); 

在您控制器你收到這樣的對象:

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

通知控制器參數名稱和jQuery的變量名是一樣的... 控制器將對象自動映射到模型

+0

但是,我不知道確切的名字,例如你的解決方案。我不能像這樣硬編碼。我需要傳遞一個匿名對象,因爲我們通過html.actionlink() new {name where title = title,age where title = title} 我可以這樣做嗎? –

0

更好以不同的方式構建您的查詢,而不是將url直接傳遞給$.ajax,請對其進行修改以滿足您的需求。 因此,本質上,您將剃刀生成的URL從@Html.RouteUrl方法存儲到JavaScript變量中。然後你追加查詢字符串。

因爲,在這種情況下,查詢字符串包含動態值,這意味着有些人可能不會列出在每一個要求,你需要讓他們在一個佔位符變量中列出,並相應地替換值。

你以後再這樣做,你只是追加查詢字符串到基本URL,並提供給$.ajax

看看下面的例子(我已經包括小提琴鏈接,看到它在行動)。我將@Route.Url生成的URL存儲在url變量中。我還在keys表中聲明瞭模型的所有鍵,並且定義了一個placeholder字符串以相應地替換值。

fixPlaceholder方法我剛替換所有{key}=${placeholder}出現與我data對象的值(從那裏你得到你的動態值)或空(如果該值不針對特定屬性設置的)。

最後,我將placeholder附加到url並將它傳遞給$.ajax。結合會做的ASP.NET MVC側它的魔力,所以不要擔心,只是聲明你的控制器的動作正常,在這個例子中期待一個複雜的對象,如:

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

爲了您的客戶端代碼,你可以有這樣的事情這樣的:

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等,您可能需要將它們標記爲空,以避免多毛的情況。像下面的模型一樣。

using System; 
namespace HelloWorldMvcApp 
{ 
    public class SampleViewModel 
    { 

     public string Title { get; set; } 

     public string Question { get; set; } 

     public int? AnswerNumber { get; set; } 

     public string View { get; set; } 

     public DateTime? Date { get; set; } 

     public string Vote { get; set; } 
    } 
} 
+0

感謝您的代碼和信息。 var數據在這裏包含靜態字段。如:標題:「Myitle」,問題:「MyQuestion」。我需要在這裏生成一個查詢。喜歡:標題:「Myitle」,問題:選擇問題,其中title = MyTitle。我可以這樣做嗎? –