2015-06-20 14 views
2

我有一個模式彈出內部的表格,用戶可在文本框中輸入文字,然後點擊加號按鈕,動態地增加它們在鍵入的文本到DIV這樣他們就可以繼續再添加一個。問題回傳動態字符串數組

<div class="form-group"> 
    <label class="control-label col-sm-4" for="prefix"> 
     Cast <span style="color:red">*</span> 
    </label> 
    <div class="col-sm-5"> 
     <input type="text" class="form-control col-sm-5" id="Cast" /> 
    </div> 
    <div class="col-sm-1"> 
     <button type="button" id="btnNewCast" class="btn btn-default">+</button> 
    </div> 
</div> 
<div class="form-group"> 
    <label class="control-label col-sm-4" for="prefix"></label> 
    <div class="col-sm-6" id="newCast"> 

    </div> 
</div> 

如這裏所示:

enter image description here

的NEWCAST是我顯示由jquery的輸入的值。

當他們點擊btnNewCast下面的腳本被稱爲

$("#btnNewCast").click(function() { 
      $("#newCast").append("<span class='label label-success label-as-badge custom-line-height' id='cast[]'><i class='glyphicon glyphicon-tag'></i> "+ $("#Cast").val() + "</span><br/>"); 

      $("#Cast").val(''); 
     }); 

,看起來像這樣:

enter image description here

的HTML如下:

<span id="cast[]" class="label label-success label-as-badge custom-line-height"> 
<i class="glyphicon glyphicon-tag"></i> 
    They Appear Here  
</span> 

當他們按提交對我傳回值的形式,如圖她e:

$("#btnAddMovie").click(function() { 

       $.ajax({ 
        url: '/Movies/Add', 
        //data: $('NewMovie').serialize(), 
        data: { "Title": $("#Title").val(), "Classification": $("#Classification").val(), "Rating": $("#Rating").val(), "ReleaseDate": $("#ReleaseDate").val(), "Cast": $("#Cast").val() }, 
        cache: false, 
        type: "POST", 
        success: function (result) { 
         if (result.success) { 

         } 
        }, 
        error: function (result) { 
         alert("Error"); 
        } 
       }); 
     }); 

其中映射到我的模型,並正常工作。

控制器:

[HttpPost] 
    public ActionResult Add(Movie model) 
    { 


     return View(); 
    } 

我的模型聲明如下:

public int MovieId { get; set; } 
public int Rating { get; set; } 
public int ReleaseDate { get; set; } 
public string Title { get; set; } 
public string Classification { get; set; } 
public string Genre { get; set; } 
public string[] Cast { get; set; } 

我的問題是,你可以看到演員是一個字符串數組,用戶輸入的項目(這是在圖片)我想,當他們張貼到他們都映射到鑄造字符串數組中。

我已經試過

"Cast": $("#cast[]").val() 

但發佈時,我得到一個jQuery錯誤,無法識別的表達

我不能讓它正確地映射..

** **更新完成post method

$("#btnAddMovie").click(function() { 

      var stringArr = $('span[data-id="cast[]"]').map(function() { 
       return $(this).text().trim(); 
      }); 

      $.ajax({ 
       url: '/Movies/Add', 
       //data: $('NewMovie').serialize(), 
       data: { "Title": $("#Title").val(), "Classification": $("#Classification").val(), "Rating": $("#Rating").val(), "ReleaseDate": $("#ReleaseDate").val(), "Cast": stringArr }, 
       cache: false, 
       type: "POST", 
       success: function (result) { 
        if (result.success) { 

        } 
       }, 
       error: function (result) { 
        alert("Error"); 
       } 
      }); 


     }); 
+0

@ShaunakD我有一個輸入稱爲投放的是,他們鍵入名稱,但用戶輸入的文本被使用jQuery動態添加到視圖我已經證明了。我需要將每個輸入的名稱傳回給控制器。所以我需要一些如何映射他們已經輸入到鑄造字符串數組的名稱 –

+0

是的,當你使用'.val()'作爲'val()'時,我很困惑'只適用於輸入,並且沒有任何輸入在所示的代碼中。查看下面的答案,檢查它是否有效。 –

回答

2

很少問題:

  1. <span>沒有.val() (value),請使用text()
  2. 錯誤

    Unrecognized expression

    是因爲:[] - 特殊字符不以純#..選擇允許的。使用[id=""]

  3. 因此,使用map()遍歷這一點。

var stringArr = $('span[id="cast[]"').map(function(){ 
    return $(this).text().trim(); 
}); 

此外,要創建span通過jQuery的道路,ID = cast[]是越來越複製,重複的標識是無效的標記。使用類屬性或data-*屬性,如data-id="cast[]。然後,該代碼將是:

var stringArr = $('span[data-id="cast[]"').map(function(){ 
    return $(this).text().trim(); 
}); 

Demo -

+0

我已經實現了你的建議,但我現在得到了TypeError:'assign'在一個沒有實現接口位置的對象上調用。我已經用完整的帖子方法更新了我的問題,其中包括您的建議 –

+0

在ajax http://jsfiddle.net/yqv5e0pw/1/中嘗試選項'traditional:true,'。或者傳遞一個逗號分隔的字符串並分割到數組服務器端。 –

+0

工作,但在我的控制器,而不是獲取投影中的文本[]我得到[對象,對象] –