0

为什么不使用 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。为什么?

4

1 回答 1

0

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

更新:好的,我可能对此并不完全正确,但只是想提供帮助。查看您提供的图像后,我认为问题可能出在您命名输入字段的方式上。我相信您要创建的是一个在每个索引处都有字段 FirstName 等的对象。你的动作控制器可能不会以同样的方式解释这点。

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

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

这将为您提供所有发布的字符串值,因此您不必继续计数。

希望这可以帮助。

于 2013-06-25T14:46:15.247 回答