Посмотрите на ваше сообщение и его параметры.Имена тех действительно важны.
Ваши флажки
<input type="checkbox"
name="selectedEmpresa"
value="@empresa.EmpresaId"
работают нормально, потому что посмотрите на имя входа, его " selectedEmpresa " это то же имя, что и в Controller Action определение.Связыватель модели ищет это имя в опубликованных данных и, если он его находит, он создает из него объект.В вашем случае он попытается разобрать данные в string [] object.
Итак ... прежде всего вам нужно изменить определение действия на что-то вроде.
[HttpPost]
public ActionResult AgregarEmpresas(int? id, FormCollection formCollection, string[] selectedEmpresa,string [] empresaTextBox)
{
}
Затем вы должны изменить сгенерированный html.
@Html.TextBoxFor(model => empresa.cargo, new { style = "width: 150px;", name="empresaTextBox" })
С этими изменениями вы должны получить некоторые данные внутри Action .Однако вы получите что-то странное, потому что у вас есть несколько флажков и текстовых полей , чтобы сообщить связующему модели, что существует несколько элементов из тех, что вам нужно подготовить специальное имя входов, которое содержит номер индекса.
Посмотрите на этот пример
<input name="childs[0]"></input>
<input name="childs[1]"></input>
В этом случае Model Binder создаст массив объектов, который содержит 2 из них.
Итак, наконецВаш код должен выглядеть следующим образом.
@using (Html.BeginForm("AgregarEmpresas", "Empleado"))
{
<fieldset>
<div class="editor-field">
<table>
<tr>
@{
int cnt = 0;
int i=0;
List<ITCOrganigrama.ViewModel.AsignarEmpresa> empresas = ViewBag.Empresas;
foreach (var empresa in empresas)
{
if (cnt++ % 5 == 0) {
@: </tr> <tr>
}
@: <td>
<input type="checkbox"
name="selectedEmpresa[@i]"
value="@empresa.EmpresaId"
@(Html.Raw(empresa.Assigned ? "checked=\"checked\"" : "")) />
@empresa.Nombre
<div>
@Html.LabelFor(model => empresa.cargo)
@Html.TextBoxFor(model => empresa.cargo, new { style = "width: 150px;" ,name=String.Format("empresaTextBox\[{0}\]",i) })
@Html.ValidationMessageFor(model => empresa.cargo)
</div>
@:</td>
i++;
}
@: </tr>
}
</table>
</div>
<p>
<input type="submit" value="Agregar" />
</p>
</fieldset>
}
Если вы заставите это работать.Затем я попытался бы создать класс с одним логическим и одним string значением.С этим изменением вы будете работать с массивом классов вместо двух массивов со строками.