【问题标题】:How to pass value of htmlhelper from table (view) to controller?如何将 htmlhelper 的值从表(视图)传递给控制器​​?
【发布时间】:2019-12-19 05:00:48
【问题描述】:

我只想在单击更新按钮时针对特定 ID 更新一行中的单个值,该 ID 在控制器中可用,但更新后的值字段不可用,因此当我按下更新按钮时,控制器更新了数据库但在 DB 中存储一个空值。

//View Code
<tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(m => item.Id)
                </td>
                <td>
                    @Html.DisplayFor(m => item.TagName)
                </td>
                <td>
                    @Html.DisplayFor(m => item.TagCategory)
                </td>
                    <td>
                     @Html.TextBoxFor(m => item.TagValue, new { htmlAttributes = new { @class = "form-control" } })
                    </td>
                <td>
                    @Html.ActionLink("Update", "Update", new { id = item.Id}, new { htmlAttributes = new { @class = "form-control" } })
                </td>
            </tr>
        }
    </tbody>
//Controller Code
 public ActionResult Update([Bind(Include = "Id,TagValue") ]Tag tags)
    {
        var data = db.Tags.Where(x => x.Id == tags.Id).FirstOrDefault();
        if (data!=null)
        {
            data.TagValue = tags.TagValue;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View();
    }

【问题讨论】:

  • 也许你想更新一个特定的行?但是您需要使用 jquery/ajax,或者如果您使用这种方法,您需要在表单标签内创建动态表单标签,您需要提交按钮。
  • 你会包含你的整个 html/razor 吗?
  • 看看MVC Updating individual row of table data POST。它可能会有所帮助

标签: c# sql asp.net-mvc model-view-controller


【解决方案1】:

所以现在您的更新按钮发出 GET 请求。数据库存储空值,因为当您创建 ActionLink 时,您没有将 TagValue 作为参数传递,因为对于 GET 请求,变量需要在 url 中传递。您可以像这样将 TagValue 添加为参数

@Html.ActionLink("Update", "Update", new { id = item.Id, TagValue = item.TagValue }, new { htmlAttributes = new { @class = "form-control" } })

我认为这不会按您想要的方式工作,因为我假设您希望用户能够更改 TagValue 的值,然后点击更新以保存该值。这个解决方案所做的只是获取 TagValue 的原始值。

如果您希望能够编辑 TagValue 然后提交,您可以将您的 html 更改为如下所示

<tbody>
@foreach (var item in Model)
{
    <tr>
        <form action="@Url.Action("Update")" method="post">
            <td>
                @Html.HiddenFor(m => item.Id, new { @Name = "Id" })
                @Html.DisplayFor(m => item.Id)
            </td>
            <td>
                @Html.DisplayFor(m => item.TagName)
            </td>
            <td>
                @Html.DisplayFor(m => item.TagCategory)
            </td>
            <td>
                @Html.TextBoxFor(m => item.TagValue, new { @class = "form-control", @Name="TagValue"  })
            </td>
            <td>
                <input type="submit" value="Update" />
            </td>
        </form>
    </tr>
}

这将为您拥有的每个标签创建一个表单,然后在您点击提交时生成一个 POST 请求。

vikscool 的评论也是您可以使用的另一个很好的解决方案。

【讨论】:

    【解决方案2】:

    您只需要将视图与发送和接收数据的表绑定,您可以使用 Html Begin Forms

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 2012-11-24
      相关资源
      最近更新 更多