【发布时间】:2014-02-06 08:25:30
【问题描述】:
我认为有以下表格:
@using(Ajax.BeginForm("AddAttendeeInternalAddressBook", "Attendee", new AjaxOptions { HttpMethod = "POST", OnSuccess = "doneInternalAddressBook" }))
{
@Html.HiddenFor(m=>m.SelectedAddressBookPerson.FirstName)
@Html.HiddenFor(m=>m.SelectedAddressBookPerson.LastName)
@Html.HiddenFor(m=>m.SelectedAddressBookPerson.AppointmentId)
<div class="form-group">
@Html.LabelFor(m => m.SelectedAddressBookPerson.Email, new { @class = "col-md-2 control-label" })
<div class="col-md-8 input-group">
@Html.TextBoxFor(m => m.SelectedAddressBookPerson.Email, new { id = "SelectedAddressBookPerson", @class = "form-control", PlaceHolder = "Search in AddressBook..." })
<input type='submit' id="btnAddressBook" class="btn btn-default" value="Add>>">
</div>
</div>
}
还有这张桌子:
<table class="table table-striped table-hover" id="tableAttendees">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
</tr>
</thead>
<tr>
</tr>
</table>
每当提交表单时,我都想将表单中的值(名字、姓氏、电子邮件等)添加到表中。我应该怎么做才能做到这一点?
控制器方法
[HttpPost]
public void AddAttendeeInternalAddressBook(CreateAppointmentSelectPersons internalAddressbookPerson)
{
_attendeeRepository.AddInternalAddressBookAttendee(
internalAddressbookPerson.SelectedAddressBookPerson.AppointmentId,
internalAddressbookPerson.SelectedAddressBookPerson.FirstName,
internalAddressbookPerson.SelectedAddressBookPerson.LastName,
internalAddressbookPerson.SelectedAddressBookPerson.Email);
}
我还可以添加一个函数,将表单值作为表的 json 数据返回,但这意味着要返回数据库并加载数据,每次用户提交表单或添加一些值时,表都应该更新到数据库可能是性能问题?我认为让 jquery 函数将表单值推送到表会更好,但是我对 jquery 了解不多(只是一个初学者)
public ActionResult AttendeeTableData(Guid appointmentId)
{
var attendees = _attendeeRepository.GetAttendees(appointmentId);
return Json(attendees);
}
编辑1: 这就是我试图做的
<script type="text/javascript">
$(function () {
$("#SelectedAddressBookPerson").autocomplete({
source: '/Appointment/AddressBookPerson',
minLength: 1,
select: function(event,ui) {
$(@Html.IdFor((m=>m.SelectedAddressBookPerson.FirstName))).val(ui.item.FirstName);
$(@Html.IdFor(m=>m.SelectedAddressBookPerson.LastName)).val(ui.item.LastName);
},
});
});
$(function () {
$("#btnAddressBook").on('click', function () {
$("#form2").submit(function () {
var fields = $(":input");
jquery.each(fields, function (i, field) {
$("#tableAttendees").find('tbody tr:last').append("<td>" + field.value + "</td>")
});
})
})
});
</script>
但这不起作用
编辑 2:
@using(Ajax.BeginForm("AddAttendeeInternalAddressBook", "Attendee", new AjaxOptions { HttpMethod = "POST", OnSuccess = "doneInternalAddressBook" }))
{
@Html.HiddenFor(m=>m.SelectedAddressBookPerson.FirstName)
@Html.HiddenFor(m=>m.SelectedAddressBookPerson.LastName)
@Html.HiddenFor(m=>m.SelectedAddressBookPerson.AppointmentId)
<div class="form-group">
@Html.LabelFor(m => m.SelectedAddressBookPerson.Email, new { @class = "col-md-2 control-label" })
<div class="col-md-8 input-group">
@Html.TextBoxFor(m => m.SelectedAddressBookPerson.Email, new { id = "SelectedAddressBookPerson", @class = "form-control", PlaceHolder = "Search in AddressBook..." })
<input type='submit' id="btnAddressBook" class="btn btn-default" value="Add>>">
</div>
</div>
}
<table class="table table-striped table-hover table-bordered" id="tableAttendees">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
</tr>
</thead>
<tbody></tbody>
</table>
@section Scripts{
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/Scripts/jquery-ui-1.10.4.min.js")
@Scripts.Render("~/Scripts/jquery.unobtrusive-ajax.min.js")
@Scripts.Render("~/bundles/Kendo")
@Scripts.Render("http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.js")
<script id ="personTmpl" type="text/x-jquery-tmpl">
<tr>
<th>${FirstName}</th>
<th>${LastName}</th>
<th>${Email}</th>
</tr>
</script>
<script>
$(function () {
$("#btnAddressBook").click(function (e) {
var model = new Object();
model.FirstName = $(@Html.IdFor(m=>m.SelectedAddressBookPerson.FirstName)).val();
model.LastName = $(@Html.IdFor(m=>m.SelectedAddressBookPerson.LastName)).val();
model.Email = $(@Html.IdFor(m=>m.SelectedAddressBookPerson.Email)).val();
$("#personTmpl").tmpl(model).appendTo("#tableAttendees");
})
})
</script>
<script type="text/javascript">
$(function () {
$("#SelectedAddressBookPerson").autocomplete({
source: '/Appointment/AddressBookPerson',
minLength: 1,
select: function(event,ui) {
$(@Html.IdFor((m=>m.SelectedAddressBookPerson.FirstName))).val(ui.item.FirstName);
$(@Html.IdFor(m=>m.SelectedAddressBookPerson.LastName)).val(ui.item.LastName);
},
});
});
</script>
}
【问题讨论】:
-
这两个组件是在同一个页面生成的吗?
-
你能告诉我们你的控制器动作代码吗?
-
@AndreiV 是的,它是同一页,想法是您将人员添加到您的约会中,每次用户将人员添加到他的约会中时,他都可以在旁边的表格中看到他添加的人员列表.
-
@ramiramilu 我不认为我需要显示我的控制器代码,我只需要将这些表单值添加到表中。一个jQuery函数可能吗?但如果你想查看控制器代码,我可以添加它
-
@Biplov13,我想知道您的控制器操作是否返回什么数据、部分视图或 json 数据?我们可以使用 jquery 将该数据绑定到 div 吗?我就是因为这个原因才问的。无论如何,我会尝试用 jquery 来解决它并将它作为答案发布给你。
标签: jquery html asp.net-mvc forms