我想进入控制器和模型以及来自集合的特定值,其中我按下按钮
<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++)
{ %>
<tr>
<td><%: Html.Label(Model.NorthOrderDetails[i].ProductID.ToString()) %></td>
<td><%: Html.Label(Model.NorthOrderDetails[i].ProductName) %> </td>
<td><%: Html.TextBoxFor(m => m.NorthOrderDetails[i].Quantity) %></td>
<td><%: Html.TextBoxFor(m => m.NorthOrderDetails[i].UnitPrice) %></td>
<td><%: @Html.ActionLink("Go to second view", "ViewTwo", "Order", Model, null)%></td>
<input type="submit" title="ads" value =<%: Model.NorthOrderDetails[i].ProductID.ToString()%> name=ssad />
<tr>
<% } %>
</table>
我可以在收藏中设置值,例如
<input type="submit" title="ads" value =<%: Model.NorthOrderDetails[i].ProductID.ToString()%> name=ssad />
此值将等于17,例如在控制器中。这项工作,但我如何将按钮中的文本从集合中的值更改为任何文本?
更新 我使用Stephen Muecke的代码,但我编辑表因为我使用aspx页面
<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="<%:i %>" /><td>
而且,不幸的是脚本没有调用控制器
答案 0 :(得分:2)
每次要删除项目时,您都可以使用ajax将项目ID值发布到删除数据库中项目的控制器方法,然后从中删除该项目,而不是执行完整发布并重新生成视图。 DOM。这将大大提高性能,这意味着您可以避免使用Session
。
将视图更改为(抱歉,这是Razor语法)
@for (int i = 0; i < Model.NorthOrderDetails.Count; i++)
{
<tr>
<td>@Html.LabelFor(Model.NorthOrderDetails[i].ProductID)</td> // ToString not required
<td>@Html.Label(Model.NorthOrderDetails[i].ProductName)</td>
<td>@Html.TextBoxFor(m => m.NorthOrderDetails[i].Quantity)></td>
<td>@Html.TextBoxFor(m => m.NorthOrderDetails[i].UnitPrice)</td>
<td>@Html.ActionLink("Go to second view", "ViewTwo", "Order", Model, null)</td> // This wont work
<td>
<button type="button" class="delete" data-id="@Model.NorthOrderDetails[i].ProductID">Delete</button><td> // change this
<input type="hidden" name="@Model.NorthOrderDetails.Index" value="@i" /> // add this
</tr>
}
</table>
<input type="submit" value="Save" /> // add this
注意:
@Html.ActionLink("Go to second view", "ViewTwo", "Order", new { ID = Model.NorthOrderDetails[i].ProductID }, null)
所以你可以将productID传递给ViewTwo()
方法Index
属性添加特殊隐藏输入。这是用的
由DefaultModelBinder
匹配的集合
索引器是非连续的(如果删除项目,它们将是
在收集的中间)ProductID
呈现任何输入,这意味着您不会
能够在回发后识别产品。你需要添加
隐藏的输入然后添加以下脚本
var url = '@Url.Action("Delete", "YourControllerName")';
$('.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(data) {
if(data) {
row.remove(); // remove the row from the table
} else {
// oops!
}
});
});
和控制器
public ActionResult View(IEnumerable<YourModel> model)
{
// Save your collection and redirect
}
[HttpPost]
public JsonResult Delete(int ID)
{
// Delete the product in the database based on the ID
return Json(true);
}
注意:如果删除某个项目可能会以某种方式抛出和失败,那么您应该return Json(null);
以便可以在ajax方法中检查它。