如何解决ASP.NET MVC3-将对象动态添加到对象上的数组
|| 我正在一个网站上工作,用户应该可以在该网站上填写动态扩展表格。 我将添加带有灰色字段的行,并且当用户将焦点放在这些字段之一时,以下javascript将添加该行<tr class=\"unSelected\">
<input name=\"id[]\">
<input name=\"blabla[]\">
</tr>
$(\'.unSelected\').focusin(function () {
if ($(this).hasClass(\'unSelected\')) {
var row = $(this).clone(true);
$(this).after(row);
$(this).removeClass(\'unSelected\');
}
});
但是如何使用razor和asp.net做到这一点,因为这样将不会自动生成对象?
解决方法
在ASP.NET MVC中,如果有类似的模型类:
public class PageModel
{
public Collection<RowItem> RowItems { get; set; }
}
public class RowItem
{
public int Id {get;set;}
public string MoreFields { get; set; }
}
而且您的JavaScript会像这样添加行:
<script type=\"text/javascript\">
var currentRowIndex = 0;
$(document).ready(function () {
SetFocusEventForInputs(\'unSelected0\');
});
function SetFocusEventForInputs(className) {
var inputSelector = \'.\' + className;
$(inputSelector).focusin(function () {
AddNewRowTo(this);
$(inputSelector).unbind(\'focusin\').removeClass(className);
});
}
function AddNewRowTo(sendingInputField) {
currentRowIndex++;
var className = \'unSelected\' + currentRowIndex;
var collectionNamePrefix = \'RowItems[\' + currentRowIndex + \'].\';
var idField = $(\'<input/>\').attr(\'name\',collectionNamePrefix + \'Id\').attr(\'type\',\'text\').attr(\'class\',className);
var moreFields = $(\'<input/>\').attr(\'name\',collectionNamePrefix + \'MoreFields\').attr(\'type\',className);
var cell = $(\'<td></td>\').append(idField).append(moreFields);
var row = $(\'<tr></tr>\').append(cell);
$(sendingInputField).parents(\"tr\").after(row);
SetFocusEventForInputs(className);
}
</script>
<table>
<tr>
<td>
<input name=\"RowItems[0].Id\" type=\"text\" class=\"unSelected0\" />
<input name=\"RowItems[0].MoreFields\" type=\"text\" class=\"unSelected0\" />
</td>
</tr>
</table>
MVC中的默认模型活页夹应在发布时很好地解决
[HttpPost]
public ActionResult YourPostActionHere(PageModel model)
{
var count = model.RowItems.Count();
etc...
}
, 您可以用相同的方式进行操作,因为在上面的代码示例中,您使用的是jQuery,ASP.NET MVC也支持(当然)。
也许我听不懂您的意思,但是在上面的代码示例中看不到任何PHP代码。
, 您想要做的是一个不依赖PHP或Asp.Net的客户端脚本,因此您编写的代码无关紧要。这也应该在Asp.Net mvc中工作。
如果要收集新的控件数据以在服务器端使用它,则可以通过JavaScript收集它,并将其分配给可以在服务器端访问的隐藏字段。您可以通过将值保存在一个字符串中并用任何定界符分隔来使用一个隐藏字段。
, 您是否可能只是缺少脚本标签?就像其他人所说的,javascript是平台无关的。
<tr class=\"unSelected\">
<input name=\"id[]\">
<input name=\"blabla[]\">
</tr>
<script src=\"/Scripts/jquery.min.js\" type=\"text/javascript\"></script>
<script type=\"text/javascript\">
$().ready(function () {
$(\'.unSelected\').focusin(function () {
if ($(this).hasClass(\'unSelected\')) {
var row = $(this).clone(true);
$(this).after(row);
$(this).removeClass(\'unSelected\');
}
});
});
</script>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。