Есть много тем, связанных с этим вопросом, но я до сих пор не понял, что я делаю неправильно.Html.BeginForm вызывают право Действие в контроллере
У меня есть база данных, где я управляю доступом разных пользователей к папкам. В моем представлении пользователь может выбрать «Сотрудники», которые должны иметь доступ к определенной папке. Затем я хочу передать выбранных сотрудников в контроллер, где будет обновляться база данных.
Моя проблема: Право Действие в классе контроллера не получил вызова (у меня есть точка останова внутри)
Вот Посмотреть
@model DataAccessManager.Models.EmployeeSelectionViewModel
@{
ViewBag.Title = "GiveAccessTo";
}
@using (Html.BeginForm("SubmitSelected", "FolderAccessController", FormMethod.Post, new { encType = "multipart/form-data"}))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.fr_folder_uid_fk)
<div class="form-horizontal">
<input type="submit" value="Save" id="submit" class="btn btn-default" />
<table id="tableP">
<thead>
<tr>
<th>Selection</th>
<th>Second Name</th>
<th>First Name</th>
<th>Department</th>
</tr>
</thead>
<tbody id="people">
@Html.EditorFor(model => model.People)
</tbody>
</table>
</div>
</div>
</div>
}
Вот. Контроллер сведен к минимуму
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SubmitSelected(EmployeeSelectionViewModel model)
{
return View();
}
Подробнее: Я не уверен, что вызывает проблему, поэтому еще несколько деталей. мнения сильно типизированные к EmployeeSelectionViewModel
, он represets таблицы со всеми работниками в качестве списка вот код:
public class EmployeeSelectionViewModel
{
public List<SelectEmployeeEditorViewModel> People { get; set; }
public EmployeeSelectionViewModel()
{
this.People = new List<SelectEmployeeEditorViewModel>();
}
public Int64 fr_folder_uid_fk { get; set; }
public IEnumerable<string> getSelectedIds()
{
// Return an Enumerable containing the Id's of the selected people:
return (from p in this.People where p.Selected select p.fr_mavnr_fk).ToList();
}
}
SelectEmployeeEditorViewModel
представляет собой одну строку таблицы со всеми работниками.
public class SelectEmployeeEditorViewModel
{
public bool Selected { get; set; }
public string fr_mavnr_fk { get; set; }
public string firstName { get; set; }
public string secondName { get; set; }
public string dpt { get; set; }
}
И это имеет вид, которые создают флажков для каждого сотрудника
@model DataAccessManager.Models.SelectEmployeeEditorViewModel
<tr>
<td style="text-align:center">
@Html.CheckBoxFor(model => model.Selected)
@Html.HiddenFor(model => model.fr_mavnr_fk)
</td>
<td>
@Html.DisplayFor(model => model.secondName)
</td>
<td>
@Html.DisplayFor(model => model.firstName)
</td>
<td>
@Html.DisplayFor(model => model.dpt)
</td>
</tr>
Параметр/FolderAccessController/URL SubmitSelected называется в браузере при нажатии на кнопку Submit, но, как упоминалось в Action ISN 't вызывается.
EDIT: Я получаю HTTP 404 не найдена ошибка после нажатия кнопки
ли вы какие-либо ошибки на клиенте? Например, код 4xx или 5xx? –
Если класс, определяющий контроллер, называется 'FolderAccessController', вы должны иметь к нему доступ, используя'/FolderAccess/SubmitSelected' и '@ Html.BeginForm (« SubmitSelected »,« FolderAccess », ...)' вместо 'FolderAccessController' – haim770
Также почему' enctype' установлен в 'multipart/form-data', когда вы фактически не загружаете (или не ожидаете) какой-либо файл? – haim770