Контроллер ActionLink вызывается дважды - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть табличное представление со списком ролей и ссылкой на действие для создания новых ролей.Ниже приведена моя страница role.cshtml

@model List<ExpenCare.Models.CompanyRole>

<div class="row">
@Html.Partial("_RightSidePane")
<div class="col-10 col-sm-8 col-xs-8 col-md-10">
    <div class="tab-content" id="nav-tabContent">
        <div class="tab-pane fade" id="list-Roles-Content" role="tabpanel" aria-labelledby="list-Roles"></div>
        @using (@Html.BeginForm("UpdateRoles", "Admin", FormMethod.Post))
        {
            <table class="table">
                <tr>
                    <th>
                        Name
                    </th>
                    <th>
                        Enable
                    </th>
                </tr>

                @for (var i = 0; i < Model.Count(); i++)
                {
                    <tr>
                        <td>
                            @Html.HiddenFor(m => m[i].Id)
                            @Html.HiddenFor(m => m[i].Name)
                            @Html.DisplayFor(m => m[i].Name)
                        </td>
                        <td>
                            @Html.EditorFor(m => m[i].Enabled, new { @checked = "checked" })
                        </td>
                    </tr>
                }

            </table>
            <p><input type="submit" value="Save Changes" /></p>
            <p style="color:green; font-size:12px;">@ViewBag.Message</p>
            <p>
                @Html.ActionLink("Create new Roles", "ViewCreateRoles", "Admin", null, new { id = "CreateRoles", @class = "appao-btn" })
            </p>
        }
    </div>
</div>
</div>

Вызов кнопки «Создать новые роли» для метода ViewCreateRoles в контроллере администратора, о котором говорится ниже.

public ActionResult ViewCreateRoles()
{
   return View("Roles/CreateRoles");
}

На странице CreateRoles.cshtml пользователь можетсоздать роль и отправить.при отправке он перенаправляет на действие CreateRoles в том же контроллере администратора.

@model ExpenCare.Models.CompanyRole

@{
    ViewBag.Title = "CreateRoles";
}

<div class="row">
    @Html.Partial("_RightSidePane")
    <div class="col-10 col-sm-8 col-xs-8 col-md-10">
        <div class="tab-content" id="nav-tabContent">
            <div class="tab-pane fade show active" id="list-Profile-Content" role="tabpanel" aria-labelledby="list-Profile">

                @using (Html.BeginForm("CreateRoles", "Admin", FormMethod.Post))
                {
                    @Html.AntiForgeryToken()

                    <div class="form-horizontal">
                        <hr />
                        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
                        <div class="form-group">
                            @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
                            <div class="col-md-10">
                                @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
                                @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
                            </div>
                        </div>

                        <div class="form-group">
                            @Html.LabelFor(model => model.Enabled, "Enable", htmlAttributes: new { @class = "control-label col-md-2" })
                            <div class="col-md-10">
                                <div class="checkbox">
                                    @Html.EditorFor(model => model.Enabled)
                                    @Html.ValidationMessageFor(model => model.Enabled, "", new { @class = "text-danger" })
                                </div>
                            </div>
                        </div>

                        <div class="form-group">
                            <div class="col-md-offset-2 col-md-10">
                                <input type="submit" value="Create" class="btn btn-default" />
                            </div>
                        </div>
                    </div>
                }
                </div>
        </div>
        </div>
    </div>

Ниже приведен метод CreateRoles в контроллере администратора.

public ActionResult CreateRoles(CompanyRole role)
        {
            List<CompanyRole> roles;
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri("http://localhost:1888/api/");
            var responseTask = client.PostAsJsonAsync("CompanyRoles", role);
            responseTask.Wait();

            var result = responseTask.Result;
            if (result.IsSuccessStatusCode)
            {
                var readTask = result.Content.ReadAsAsync<List<CompanyRole>>();
                readTask.Wait();

                roles = readTask.Result;
                return View("Roles/Roles", model: roles);
            }
            else
            {
                ViewBag.Message = "not updated.";
                return View("Roles/CreateRoles");
            }

        }

После создания роли при успешном выполнении пользователь перенаправляется на роли.cshtml, упомянутый выше, который показывает все роли.Моя проблема в том, что мой процесс добавления роли (перейдите на страницу ролей -> создать новую роль -> перенаправить на страницу ролей) работает нормально.Но сразу после перенаправления на страницу ролей я получаю «Исключение типа« System.Web.Http.HttpResponseException », возникшее в ExpenCare.dll, но не обработанное в коде пользователя», ошибка в моем веб-API, который вызывается в CreateRoles.когда я отлаживаю процесс, я вижу, что после перехода к методу «Dispose» административного контроллера метод «CreateRoles» снова вызывается и нулевые данные «CompanyRole role» передаются в веб-API.Я не знаю, как это называется снова.Я зарегистрировался в Google и попытался удалить все «#» из href и src моих страниц просмотра и макета, но он все еще не работает.Я не могу понять, почему один и тот же метод вызывается дважды без нажатия кнопки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...