MVC 3 Razor передает данные строки веб-сетки контроллеру с помощью actionlink

У меня есть веб-сетка со ссылкой на действие, которую я хочу использовать для редактирования выбранной строки в новом представлении. Я знаю, что могу использовать actionlink для предоставления аргумента моему методу actionresult, но я не знаю, как передать данные строки веб-сетки моему контроллеру, кроме использования actionlink.

@{
    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.


person nick gowdy    schedule 07.11.2012    source источник
comment
Неужели никто не знает решения этой проблемы?   -  person nick gowdy    schedule 07.11.2012


Ответы (1)


На самом деле у вас есть два варианта: ваше действие принимает идентификатор пользователя и ищет пользователя, или каждая строка вашей сетки содержит форму, которая отправляет все данные пользователя в действие, когда вы нажимаете «Изменить». Какой из них вы выберете, зависит от того, что должно делать ваше действие:

  1. Если он перенаправляет на форму, где пользователь может редактировать выбранного пользователя, используйте первый подход.
  2. Если он берет все данные пользователя и сохраняет обновленного пользователя, используйте второй подход.

Изменить

Чтобы передать идентификатор, вы можете использовать это для ссылки действия:

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

... и это для подписи действия:

public ActionResult EditUser(string id)
person Steve Wilkes    schedule 07.11.2012
comment
Я хочу взять удостоверение личности. Есть ли у вас примеры этого. Я пытаюсь передать значения строки в свой ActionResult с идентификатором, который я мог бы легко запросить в базе данных и получить правильные данные. Проблема в том, что я не знаю, какой параметр я должен указать в ActionLink. - person nick gowdy; 07.11.2012
comment
Спасибо, я не знал, что ты так умеешь. Как item.email имеет правильное значение? - person nick gowdy; 07.11.2012
comment
Честно говоря, я не уверен, что такое item - я просто скопировал его из кода ссылки на удаление в вашем вопросе... - person Steve Wilkes; 07.11.2012
comment
Как это будет доступно для каждой строки.? - person Rajan Mishra; 22.02.2017