使用 @Ajax.BeginForm 和 html5 控件时 FormCollection 参数为空
FormCollection parameter is empty while using @Ajax.BeginForm and html5 controls
我正在使用 boostrap 开发 ASP.NET MVC5 项目,jquery,jquery UI。提交工作正常,但创建操作中的 FormCollection 在 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>
家庭控制器是:
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
string nombres = collection["modalNombres"];
return RedirectToAction("Index");
}
catch
{
return View();
}
}
None 个 <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 到 post 表单值,因此 POST 方法中的 return RedirectToAction("Index");
毫无意义。 Ajax 调用停留在同一页面上,它们不会重定向。
我正在使用 boostrap 开发 ASP.NET MVC5 项目,jquery,jquery UI。提交工作正常,但创建操作中的 FormCollection 在 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>
家庭控制器是:
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
string nombres = collection["modalNombres"];
return RedirectToAction("Index");
}
catch
{
return View();
}
}
None 个 <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 到 post 表单值,因此 POST 方法中的 return RedirectToAction("Index");
毫无意义。 Ajax 调用停留在同一页面上,它们不会重定向。