ASP.NET MVC3-将项动态添加到对象的数组中
本文关键字:对象 数组 添加 动态 NET MVC3- ASP | 更新日期: 2023-09-27 17:58:12
我正在开发一个网站,用户应该能够填写一个动态扩展表单。
我会添加一行灰色字段,当用户将焦点放在其中一个字段时,下面的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', 'text').attr('class', 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...
}
您也可以用同样的方法,因为在上面的代码示例中,您使用的是(当然)ASP.NET MVC也支持的jQuery。
也许我不理解你的意思,但在上面的代码示例中我看不到任何PHP代码。
你想要做的是一个客户端脚本,它不依赖于PHP或Asp.Net,所以你的代码是由什么编写的并不重要。这也应该在Asp.Netmvc中工作。
如果你想收集新的控制数据以便在服务器端使用,你可以通过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>