2015-09-07 55 views
1

可能有更好的方法來做到這一點。 在我的表單中,用戶可以輸入以下街道名稱的列表:mvc/JQuery - 使用數組發佈表單Viewmodel

<div class="row"> 
     <div class="col-md-2"> 
      <label for="StreetName">By Street Name(s) </label> 
     </div> 
     <div class="ui-widget col-md-6"> 
      <input id="StreetName" style="width: 500px;"> 
     </div> 
    </div> 
    <div class="row"> 
     <div class="col-md-3" style="padding-left: 0; vertical-align: top"> 
      <label for="StreetNameList">Selected Streetnames List:</label> 
     </div> 
    </div> 
    <div class="row"> 
     <div class="col-md-5" style="height: 200px; width: 600px; overflow: auto; border: gray solid 1px; background: whitesmoke"> 
      <div id="StreetNameList" name="StreetNameList" style="height: 200px; width: 600px;"></div> 
      @Html.HiddenFor(m => m.StreetNames) 
     </div> 
    </div> 

當用戶點擊提交按鈕時,街道名稱被放入隱藏字段m.StreetNames這是一個字符串數組。 參見

$("#submitdata").click(function() { 
    var $form = $(this).closest("form"); 
    var streetnames = []; 
    var streetnamestring; 
    $.each($("#StreetNameList .street"), function (i, $street) { 
     streetnames.push($street.innerHTML); 
    }); 

    $("#StreetNames").val(streetnames); 
    $form.submit(); 
}); 

在視圖模型,街道名稱被定義爲

public string[] StreetNames { get; set; } 

的問題是,當Controllor動作方法接收視圖模型,僅被填充的第一項,和它包含的整個數組由逗號分隔。 我如何解決這個問題,讓我發佈一個數組呢?

+0

您顯示的代碼不清晰。你沒有'class =「street」'的任何元素。沒有必要使用隱藏的輸入。如果您有多個輸入用於添加街道名稱(不顯示您已顯示的代碼),那麼只要這些輸入具有正確的'name'屬性,您的屬性將被正確綁定(無需javascript) –

回答

0

用我用來將字符串拆分爲服務器端數組的分隔符。它看起來像是重寫和使用AJAX的唯一解決方案。

0

您可以使用Ajax來發表您的要求 您可以使用Ajax來代替,而你所要做的就是設置傳統的Ajax請求我最終什麼事做的是發佈一個字符串值true

$.ajax({ 
    type: "POST", 
    url: "youraction", 
    dataType: "json", 
    traditional: true, 
    data: { 
     //your data 
    } 
}); 
+0

要使用Ajax調用將需要很多代碼才能更改。如果沒有其他人提出答案,我可能會這樣做。 – arame3333

+0

由於javascript變量/ ojects使用基於賦值的動態數據類型,因此沒有直接將它們映射到C#等價物的直接方法。 JSON填補了這個空白,Ajax提供了有效的方法來完成它。 – NZeta520

+1

@ NZeta520,'DefaultModelBinder'讀取表單數據的名稱/值對。只要控件的name屬性匹配模型屬性名稱,它就會被正確綁定。這個 –