繁体   English   中英

设置值从集合提交提交MVC

[英]set value submit from collection submit mvc

我想从集合中获取控制器和模型以及特定值,该集合等于按下按钮的那一行

 <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,例如在控制器中。 这项工作,但是如何将按钮中的文本从集合中的值更改为任何文本?

UPDATE我使用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>

而且,不幸的是脚本没有调用控制器

您可以使用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

笔记:

  1. 您的操作链接将不起作用(您无法将集合传递给GET方法)我怀疑您的意思是@Html.ActionLink("Go to second view", "ViewTwo", "Order", new { ID = Model.NorthOrderDetails[i].ProductID }, null) ,则可以将productID传递给ViewTwo()方法
  2. 将每一行中的“提交”按钮更改为一个普通按钮,并在末尾添加一个“提交”按钮(以将所有更改保存到您的文本框中的一篇文章)
  3. Index属性添加特殊的隐藏输入。 DefaultModelBinder使用它来匹配索引器不连续的集合(如果您删除集合中间的项目,它们将是连续的)
  4. 您不会为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方法中进行检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM