2016-03-14 4 views
3

Есть много тем, связанных с этим вопросом, но я до сих пор не понял, что я делаю неправильно.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 не найдена ошибка после нажатия кнопки

+1

ли вы какие-либо ошибки на клиенте? Например, код 4xx или 5xx? –

+0

Если класс, определяющий контроллер, называется 'FolderAccessController', вы должны иметь к нему доступ, используя'/FolderAccess/SubmitSelected' и '@ Html.BeginForm (« SubmitSelected »,« FolderAccess », ...)' вместо 'FolderAccessController' – haim770

+1

Также почему' enctype' установлен в 'multipart/form-data', когда вы фактически не загружаете (или не ожидаете) какой-либо файл? – haim770

ответ

1

Попробуйте удалить слово «Controller» из вашего Html.BeginForm() второго параметра, это не нужно.

@using (Html.BeginForm("SubmitSelected", "FolderAccess", FormMethod.Post, new { encType = "multipart/form-data"})) 
+0

Я использовал вашу версию, но все равно получаю сообщение об ошибке HTTP 404 –

1

Thiago Ferreira and haim770 Большое спасибо! Решение состоит в использовании комбинации ваших комментариев. Итак:

@using (Html.BeginForm("SubmitSelected", "FolderAccess", FormMethod.Post))

на контроллере

+0

Возможно, вам стоит подумать о принятии правильного ответа Тиаго Феррейры, а не написании собственного. –