Khloud Ali Ответов: 2

Я не могу выполнить функцию сохранения


Привет,
это мои ранние попытки с MVC. Я пытаюсь сделать функцию поиска по идентификатору пользователя, результатом поиска является список флажков со всеми разрешениями и отделами .те, к которым пользователь имеет доступ, по умолчанию проверяются.
Теперь моя проблема заключается в том, что когда я пытаюсь выбрать другие флажки, например, кнопка save снова переходит к функции index и никогда не переходит к функции saveData.
Я действительно заблудился и сильно изменил код. что же мне делать?

мой контроллер

public ActionResult Index(int? SearchId)
       {
           var MainVM = new MainViewModel();
           var usr_Dep = db.TBL_User_Dep_Access.Where(x => x.UserID == SearchId).Select(x => x.Dep_ID).ToList();
           var usr_Per = db.TBL_UserPermissions.Where(x => x.UserID == SearchId).Select(x => x.PermissionID).ToList();

           if (SearchId != null)
           {
               List<UserDepartmentViewModel> Udep = db.TBL_Department.Select(i => new UserDepartmentViewModel
               {
                   DepId = i.Department_ID,
                   DepName = i.Department_Name,
                   IsChecked = usr_Dep.Contains(i.Department_ID)

               }).ToList();

               List<UserPermissionViewModel> Uper = db.TBL_Permissions.Select(i => new UserPermissionViewModel
               {
                   PerId = i.PermissionID,
                   PerName = i.PermissionName,
                   IsChecked_ = usr_Per.Contains(i.PermissionID)

               }).ToList();

               MainVM.UserDepartments = Udep;
               MainVM.UserPermissions = Uper;
           }



           return View(MainVM);
       }

       [HttpPost]
       [ValidateAntiForgeryToken]
       public ActionResult SaveData (MainViewModel mainView , int? SearchId)
       {
           db.TBL_UserPermissions.RemoveRange(db.TBL_UserPermissions.Where(x => x.UserID == SearchId));
           db.TBL_User_Dep_Access.RemoveRange(db.TBL_User_Dep_Access.Where(x => x.UserID == SearchId));
           foreach (var dep in mainView.UserDepartments)
           {
               if (dep.IsChecked)
               {
                   TBL_User_Dep_Access tBL_User_Dep_ = new TBL_User_Dep_Access();
                   tBL_User_Dep_.UserID = SearchId;
                   tBL_User_Dep_.Dep_ID = dep.DepId;
                   tBL_User_Dep_.IsActive = true;
                   db.TBL_User_Dep_Access.Add(tBL_User_Dep_);
               }
           }
           db.SaveChanges();

           foreach (var per in mainView.UserPermissions)
           {
               if (per.IsChecked_)
               {
                   TBL_UserPermissions tBL_UserPermissions = new TBL_UserPermissions();
                   tBL_UserPermissions.UserID = SearchId;
                   tBL_UserPermissions.PermissionID = per.PerId;
                   tBL_UserPermissions.IsActive = true;
                   db.TBL_UserPermissions.Add(tBL_UserPermissions);
               }
           }
           db.SaveChanges();
           return View();
       }


Что я уже пробовал:

Я попытался указать действие на кнопку Сохранить, но все равно не работает так, как я хочу
@using (Html.BeginForm("Index", "Access"))
{
    @Html.AntiForgeryToken()
    @Html.TextBox("SearchId", "", new { @id = "SearchId", @placeholder = "Search for...", @class = "form-control" })
    <span class="input-group-btn">
        <input class="btn btn-default" value="Search" type="submit">Go! />
    </span>

    <ul>
        @if (Model.UserDepartments != null)
        {
            foreach (var item in Model.UserDepartments)
            {
                <li>
                    <p>
                        @Html.CheckBoxFor(modelItem => item.IsChecked)
                        @Html.DisplayFor(modelItem => item.DepName)
                        @Html.HiddenFor(modelItem => item.DepId)

                    </p>

                </li>

            }
        }

    </ul>


    <ul>
        @if (Model.UserPermissions != null)
        {
            foreach (var item in Model.UserPermissions)
            {
                <li>
                    <p>
                        @Html.CheckBoxFor(modelItem => item.IsChecked_)
                        @Html.DisplayFor(modelItem => item.PerName)
                        @Html.HiddenFor(modelItem => item.PerId)

                    </p>

                </li>

            }
        }

    </ul>

    <form action="~/Controllers/Access/SaveData">
        <input type="submit" value="Save" class="btn btn-default" onclick="onClick" />
    </form>
    


}
<script>
    function onClick()
    {
        location.href = '@Url.Action("SaveData", "Access")';
    }


</script>

2 Ответов

Рейтинг:
2

Khloud Ali

Я сделал это, и он пошел на почтовую функцию. спасибо.😍


Рейтинг:
16

Richard Deeming

Вы не можете вложить формы в HTML. Измените цель внешней формы и удалите вложенную форму.

Кроме того, удалите onClick метод, который просто выбрасывает форму и делает GET запрос на получение SaveData действие.

@using (Html.BeginForm("SaveData", "Access"))
{
    @Html.AntiForgeryToken()
    
    ...
    
    <input type="submit" value="Save" class="btn btn-default" />
}