【问题标题】:MVC 3 Razor pass webgrid row data to controller using actionlinkMVC 3 Razor 使用 actionlink 将 webgrid 行数据传递给控制器
【发布时间】:2012-11-07 12:16:42
【问题描述】:

我有一个带有操作链接的 webgrid,我想用它来编辑新视图中的选定行。我知道我可以使用 actionlink 为我的 actionresult 方法提供参数,但除了使用 actionlink 之外,我不知道如何将 webgrid 的行数据传递给我的控制器。

@{
    ViewBag.Title = "Index";
}
<h2>
    Index</h2>
<p>
    @Html.ActionLink("Create New User", "CreateUser")
</p>
<div class="webgrid-wrapper">
    @model IEnumerable<UserManager.Models.vw_UserManager_Model_Add_Users>
@{
    ViewBag.Title = "Jobs";
    WebGrid grid = new WebGrid(Model, canPage: true, canSort: true, rowsPerPage: 15, selectionFieldName: "selectedRow", fieldNamePrefix: "gridItem");

}
    @grid.GetHtml(
    fillEmptyRows: true,
        tableStyle: "webgrid",
                alternatingRowStyle: "webgrid-alternating-row",
                headerStyle: "webgrid-header",
                footerStyle: "webgrid-footer",
                selectedRowStyle: "webgrid-selected-row",
            rowStyle: "webgrid-row-style",
        mode: WebGridPagerModes.All,
columns: new[] {
    //grid.Column("ApplicationId"),
    //grid.Column("salutation"),

    //grid.Column("PasswordSalt"),

     grid.Column("FirstName"),

    //grid.Column("LoweredEmail"),
    //grid.Column("PasswordQuestion"),
    //grid.Column("PasswordAnswer"),

    // grid.Column("PasswordFormat"),
    grid.Column("LastName"),
    grid.Column("Password"),
    grid.Column("isactive"),
    //grid.Column("IsLockedOut"),
    grid.Column("email"),
   grid.Column("module_name"), 

    //grid.Column("LastLoginDate"),
    //grid.Column("LastPasswordChangedDate"),
    //grid.Column("LastLockoutDate"),

    //grid.Column("FailedPasswordAttemptCount"),
    //grid.Column("FailedPasswordAttemptWindowStart"),
    //grid.Column("FailedPasswordAnswerAttemptCount"),
    //grid.Column("FailedPasswordAnswerAttemptWindowStart"),
   // Rest of grid columns, seen previously
    @*grid.Column(
       "",
        header: "Actions",
        format: @<text>
    @Html.ActionLink("Edit", "Edit", new { id = item.email }) 
    </text>
    )   , 
     grid.Column(
       "",
        header: "Actions",
        format: @<text>
    @Html.ActionLink("Delete", "Delete", new { id = item.email })
    </text>
    )    *@
@*     grid.Column(
            header:"", 
            format:@<text><div id="btnSelectedRow">
                "@item.GetSelectLink("Edit")</div></text>
            ),*@


     grid.Column(
            header:"", 
            format:@<text><div id="btnSelectedRow">
                "@Html.ActionLink("Edit record", 
                        "EditUser",
                        "UserManager",
                                       new {selectedRow = grid.SelectedRow },
                        null
                        )</div></text>
            )
})
    @if (grid.HasSelection)
    {
        var record = grid.SelectedRow;
@*@RenderPage("~/Views/UserManager/EditUser.cshtml", new { record = grid.SelectedRow })*@

    }
</div>
<script type="text/javascript">
    $(document).ready(function () {
        function jQueryUIStyling() {
            $('input:button, input:submit').button();

            // Style tables.
            $('.webgrid-wrapper').addClass('ui-grid ui-widget ui-widget-content ui-corner-all');
            $('.webgrid-title').addClass('ui-grid-header ui-widget-header ui-corner-top');
            jQueryTableStyling();
        }

        //
        // Style tables using jQuery UI theme. This function is 
        // split out separately so that it can be part of the AJAX
        // callback of the WebGrid WebHelper in ASP.NET MVC.
        //
        function jQueryTableStyling() {
            $('.webgrid').addClass('ui-grid-content ui-widget-content');
            $('.webgrid-header').addClass('ui-state-default');
            $('.webgrid-footer').addClass('ui-grid-footer ui-widget-header ui-corner-bottom ui-helper-clearfix');
        }
    });

</script>

我的控制器

 public ActionResult EditUser(System.Web.Helpers.WebGrid record)
        {
            record.ToString();

            return View();
        }

总结

如何使用 ActionLink 通过 ActionResult 方法将行数据从一个视图传递到另一个视图。

【问题讨论】:

  • 没有人知道解决办法吗?

标签: asp.net-mvc-3 razor webgrid actionlink


【解决方案1】:

实际上,您有两个选择:让您的操作获取用户 ID 并查找用户,或者让网格的每一行包含一个表单,当您单击“编辑”时,该表单将所有用户详细信息发送到操作。您选择哪一个取决于您的操作应该做什么:

  1. 如果它重定向到用户可以编辑他们选择的用户的表单,请使用第一种方法
  2. 如果它获取所有用户详细信息并保存更新的用户,请使用第二种方法

编辑

要传递 id,您可以将其用于操作链接:

@Html.ActionLink(
    "Edit record",
    "EditUser",
    "UserManager",
    new { id = item.email })

...这是动作签名:

public ActionResult EditUser(string id)

【讨论】:

  • 我要带身份证。你有这方面的例子吗?我正在尝试将行值传递给我的 ActionResult,使用 Id 我可以轻松地查询数据库并检索正确的数据。问题是我不知道要为 ActionLink 提供什么参数。
  • 谢谢,我不知道你可以那样做。 item.email 如何有正确的值?
  • 老实说,我不确定 item 是什么 - 我只是从您问题中删除链接的代码中复制了它...
  • 每一行如何访问它。?
猜你喜欢
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
相关资源
最近更新 更多