为什么不使用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。为什么呢?
答案 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];
}
}
这样可以获取所有已过帐的字符串值,因此您无需继续计算。
希望这有帮助。