Параметр FormCollection пуст при использовании элементов управления @Ajax.BeginForm и html5
Я занимаюсь разработкой проекта ASP.NET MVC5 с интерфейсом boostrap, jquery, jquery. Submit работает нормально, но FormCollection при создании Action прибывает пустым в HomeController. Я не знаю, что я делаю неправильно или отсутствует. Пожалуйста, нужна помощь. Ниже приведен фрагмент кода.
Index.cshtml:
<div class="modal fade" id="modal" tabindex="-1" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Empleado</h4>
</div>
<div class="modal-body">
@using (Ajax.BeginForm("Create", "Home", new AjaxOptions() { HttpMethod = "post" }, new { id = "dialog", name = "dialog" }))
{
<div class="panel">
<div class="panel-body">
<div class="form-group">
<label class="control-label">Nombres</label>
<input type="text" class="form-control" id="modalNombres" placeholder="Nombres" />
</div>
<div class="form-group">
<label class="control-label">Apellidos</label>
<input type="text" class="form-control" id="modalApellidos" placeholder="Apellidos" />
</div>
<div class="form-group">
<label class="control-label">Fecha de Nacimiento</label>
<input type="text" class="form-control" id="modalFechaNacimiento" placeholder="Fecha Nacimiento" />
</div>
<div class="form-group">
<label class="control-label">Tipo Documento</label>
<select class="form-control" id="modalTipoDocumento">
<option class="placeholder" selected disabled value="">--- Seleccione ---</option>
@foreach (var item in ViewBag.TiposDocumento)
{
<option value="@item.Id">@item.Descripcion</option>
}
</select>
</div>
<div class="form-group">
<label class="control-label">Número de Documento</label>
<input type="text" class="form-control" id="modalNumeroDocumento" placeholder="Número Documento" />
</div>
</div>
<div class="panel-footer">
<button type="button" role="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
<button type="submit" role="button" class="btn btn-primary" id="btnGrabar">Grabar</button>
</div>
</div>
}
</div>
<div class="modal-footer">
</div>
</div>
</div>
</div>
HomeController - это:
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
string nombres = collection["modalNombres"];
return RedirectToAction("Index");
}
catch
{
return View();
}
}
1 ответ
Никто из вас <input>
элементы имеют name
атрибуты, поэтому на сервер ничего не отправляется. + Изменить
<input type="text" class="form-control" id="modalNombres" placeholder="Nombres" />
в
<input type="text" class="form-control" name="modalNombres" placeholder="Nombres" />
Там нет необходимости id
атрибуты, если вы не используете javascript/jquery для ссылки на них.
Тем не менее, я очень настоятельно рекомендую вам зайти на сайт MVC, пройтись по некоторым основным учебным пособиям и узнать, как создать представление в MVC. У вас должна быть модель, используйте строго типизированные html-помощники для привязки к свойствам вашей модели, а метод POST должен иметь параметр для модели, чтобы он был связан (вы никогда не должны использовать FormCollection
в MVC)
Обратите внимание, что вы используете Ajax.BeginForm()
который использует AJAX для размещения значений формы так return RedirectToAction("Index");
в вашем POST методе бессмысленно. Ajax-вызовы остаются на той же странице, они не перенаправляют.