【问题标题】:Dynamically created texbox does not post values动态创建的文本框不发布值
【发布时间】:2013-06-27 18:51:35
【问题描述】:

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

【问题讨论】:

  • 使用 jquery 的 on 或 live 方法,如 $("#addContactButton").on('click', function ()
  • 您提交的输入是否有表单标签
  • 谢谢大家的回复。我尝试了如下所有方法: 1. 尝试了 $("#addContactButton").on('click', function () 但没有解决问题。 2. 链接到 Anil 建议的链接,但我认为在我的情况下我正在附加首先然后提交表单,所以这似乎不是问题。3.我的输入确实有表单标签,我正在发布我的代码在“检查元素”时的样子的屏幕打印。它确实显示
    周围的标签。朋友们:我已经尝试调试了 3 天..并拉扯我的头发..请帮助!![在此处输入图像描述][1][1]:i.stack.imgur.com/rGJrO.png

标签: jquery asp.net-mvc


【解决方案1】:

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

更新: 好的,我可能对此并不完全正确,但只是想提供帮助。查看您提供的图像后,我认为问题可能源于您命名输入字段的方式。我相信您要创建的是一个在每个索引处都有字段 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];
   }
}

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

希望这会有所帮助。

【讨论】:

  • Jeevan,你说得对,代码确实创建了多个具有 NewContactGroup id 的 div。但是,如果我只单击一次 addContactButton,那么只有一个 ID 为 NewContactGroup 的 div。在这种情况下,我应该看到该记录发布到 clientToAdd。我不理解。附上图片供您参考。
  • 实际上有大约 10 个字段重复。 FirstName 只是其中之一。在这里为了简单起见,也在我的代码中测试我现在只用 1 个字段测试的逻辑。
猜你喜欢
  • 2013-04-09
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多