动态创建的文本框不会发布值

时间:2013-06-25 14:29:25

标签: jquery asp.net-mvc

为什么不使用jQuery post值动态创建文本框到控制器中的post方法?

jQuery代码如下:

$(document).ready(function () {
    var counter = 0;
    var curContactCount = $("#contactcount").val();

    $("#addContactButton").click(function () {
        if (parseInt(counter) + parseInt(curContactCount) >= 50) {
            alert("Only 50 Contacts allowed");
            return false;
        }

        var firstNameStr = 'NewContactList[' + counter + '].FirstName';
        var firstNameId = firstNameStr.replace("[", "_").replace("]", "_").replace(".", "_");

        var newTextBoxDiv1 = $(document.createElement('div')).attr("id", 'NewContactGroup');

        newTextBoxDiv1.html(
   ' <div class="column-margin-20t20b">' +
       ' <div class="box">' +
           ' <div class="left">' +
                '<label for="' + firstNameId + '">First Name</label>' +
           ' </div>' +
           ' <div class="right">' +
               ' <input type="text" name="' + firstNameStr + '" id="' + firstNameId + '" value=""></input>' +
           ' </div>' +
       ' </div>' +
    ' </div>'
);

        newTextBoxDiv1.appendTo("#mainDivNewClient");
        counter++;
    });
});

控制器代码:

[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult AddNewClient(ClientViewModel clientToAdd, System.Collections.Generic.Dictionary<string, string> qString)
        {
            try
            {
                if (ModelState.IsValid)..........

在clientToAdd中,我将NewContactList作为nulll。为什么呢?

1 个答案:

答案 0 :(得分:0)

上述代码不会导致具有相同ID“NewContactGroup”的多个div。

更新: 好吧,我可能不是完全正确的,但只是想帮忙。在查看您提供的图像后,我认为问题可能源于您命名输入字段的方式。我相信你要创建的是一个对象,每个索引都有FirstName等字段。这可能不会被您的Action Controller以相同的方式解释。

由于你只有一个字段(重复),你可以做的是这样的:

var counter = 0;
$("yourButton").click(function(){
  $("yourDiv").append("<input type='text' name='yourName'" + counter + " />");
  counter++;
});

然后在ClientViewModel构造函数中:

public ClientViewModel(params string[] inputValues)
{
    // Your code here.
}

或者,理论上你也可以遍历Request变量中的键

public ClientViewModel()
{
   foreach(var key in Request.Form)
   {
      string yourString = Request.Form[key];
   }
}

这样可以获取所有已过帐的字符串值,因此您无需继续计算。

希望这有帮助。