在新行中显示现有项目中的表行中的值
Displaying values in row of table from existing item in new row
我有一个表:。
<% using(Html.BeginForm("View2","Order"))
{ %>
<table id="Products" class="Products">
<tr>
<th>ProductId</th>
<th>Productname</th>
<th>Quantity</th>
<th>UnitPrice</th>
</tr>
<%for (int i = 0; i < Model.NorthOrderDetails.Count; i++)
{%>
<%: Html.HiddenFor(m => m.NorthOrderDetails[i].ProductID) %>
<%: Html.HiddenFor(m => m.NorthOrderDetails[i].ProductName) %>
<tr>
<td><%: Html.DisplayFor(m => m.NorthOrderDetails[i].ProductID) %></td>
<td><%: Html.DisplayFor(m => m.NorthOrderDetails[i].ProductName) %></td>
<td>
<input type="hidden" name="NorthOrderDetails.Index" value="<%: i %>" />
<%: Html.TextBoxFor(m => m.NorthOrderDetails[i].Quantity) %>
</td>
<td><%: Html.TextBoxFor(m => m.NorthOrderDetails[i].UnitPrice) %></td>
<td><button type="button" class="delete" data-id="<%:Model.NorthOrderDetails[i].ProductID %>">Delete</button></td>
<td> <input type="hidden" name="<%:Model.NorthOrderDetails[i].ProductName %>" value="<%: Model.NorthOrderDetails[i].Quantity %>" /></td>
</tr>
<% } %>
</table>
<input type="submit" name="button" value="Add" />
<input type="submit" name="button" value="Save" />
<% } %>
<script type="text/javascript">
var url = '<%:Url.Action("Delete", "Order")%>';
$('.delete').click(function () {
var id = $(this).data('id'); // Get the product ID
var row = $(this).closest("tr");// Get the table row
$.post(url, { ID: id }, function () {
row.remove(); // remove the row from the table when I click the delete button I'm calling this script:
});
});
</script>
并且脚本在控制器中调用此方法
[HttpPost]
public JsonResult Delete(int ID)
{
NorthOrder forOrderDetail = (NorthOrder)Session["Order"];
forOrderDetail.NorthOrderDetails.RemoveAll(z => z.ProductID == ID);
Session["Order"] = forOrderDetail;
return Json(null);
}
当我单击添加按钮时,我在控制器中调用此方法:
[HttpPost]
public ActionResult View2(NorthOrder q, string button)
{
string strDDLValue = Request.Form["sda"].ToString();
int drop = Convert.ToInt32(strDDLValue);
NorthOrder forOrderDetail = (NorthOrder)Session["Order"];
if (button == "Add")
{
NorthwindEntities n = new NorthwindEntities();
string strDDLValuse = n.Products.FirstOrDefault(_ => _.ProductID == drop).ProductName;
NorthOrderDetailscs orddetailForSession = new NorthOrderDetailscs();
orddetailForSession.ProductName = strDDLValuse;
orddetailForSession.Quantity = 0;
orddetailForSession.UnitPrice = 0;
orddetailForSession.ProductID = drop;
forOrderDetail.NorthOrderDetails.Add(orddetailForSession);
Session["Order"] = forOrderDetail;
}
return View(forOrderDetail); //
}
问题结束在非删除项目的文本框中显示数据,当我删除第一项以及添加新项目之后。虽然,在模型中添加项包含文本框的空值
在输入隐藏字段中Model.NorthOrderDetails[i].Quantity = 0
新项中,就像在调试中一样在标记中,但在文本框中的UI中,文本框中的新项包含现有项的值
例如,在表两行中
ProductID | ProductName| Quantity| UnitPrice
_____________________________________________
17 | Chang | 1 | 12
_____________________________________________
12 | Chai | 2 | 24
当我删除第一行,然后添加新行时我得到桌子
ProductID | ProductName| Quantity| UnitPrice
_____________________________________________
12 | Chai | 2 | 24
_____________________________________________
15 | Allice Mutton | 2 | 24
它的原因是什么?
您首先需要删除与在会话中存储和检索集合相关的所有内容。工作流应为
- 在 GET 方法中,获取集合并将其呈现在视图中。
- 在
Delete()
方法中,调用数据库并删除对象基于 ID 值。如果成功,则return Json(true);
,如果不成功return Json(null);
.在 ajax 成功函数中,测试数据是否返回,如果是,请删除该行,如果没有,则显示错误消息(请参阅我在这里和这里回答你之前的问题)。 View2()
方法应将集合保存到数据库(删除string button
参数)并且不应有与Add
方法的关系。
为了将新项动态添加到可以绑定到集合的 DOM 中,有两个选项:
- 调用返回使用BeginCollectionItem() 以便新项包含索引器(与当前
for
循环相同的方式)。如果您使用这种方法,然后你可以用一个简单的替换你的for
循环foreach
循环,为每个项调用部分。 - 在视图中(在隐藏元素内)包含一个 html 模板,该模板克隆并更新索引器,并将其添加到 DOM。
本答案中讨论了这两个选项。另请注意,每次添加新项目时都需要重新解析验证器。
相关文章:
- 使用jquery将mysql数据获取到新的表行中
- 如何从rails中的代码中删除新行( )
- 字符串中的
标记未正确在 HTML 中创建新行 - 反应中的新行
- 阻止ReSharper将JavaScript函数参数放到新行中
- HTML表内容:如果行很长,如何在新行中显示部分内容
- 使用ajax发送rowID并将选定的行附加到新表中
- 在新行(html)中动态添加更多文本字段
- 在新行中显示现有项目中的表行中的值
- 用于在表中添加行的Javascript代码将单元格中的数据复制到新行中
- 将字符串结果返回到表单元格中的新行中
- 在数据表的新行中添加按钮,变得未定义
- 如何使用javascript或jquery创建tr的克隆并在新行中插入数据
- 使用数据表(Meteor Tabular)在新行中绘制数组的每个元素
- 如何在7个字母/字母表/数字和新行中的新字母后的键向上插入分隔符-Jquery
- 文本区域值在新行中
- 如何从表中的每个新行中删除类
- 字符串在源代码的新行中中断,而不是在浏览器中
- 用下拉菜单在新行中选择文本
- 在新行中输出模板字符串