Si tiene dos formas simples, se puede utilizar este abordaje:
Se crean dos vistas parciales diferentes.
@model CustomerInfoModel
@using (Ajax.BeginForm("CustomerInfo", "Customer", new AjaxOptions { HttpMethod = "Post", OnBegin = "InfoLoading", OnComplete = "InfoCompleted" }, new { id = "info", @class = "form-horizontal" }))
{
<input type="text" class="form-control" name="Name" id="Name" value="@Model.Name" />
<input type="email" class="form-control" name="Email" id="Email" value="@Model.Email" />
<button type="submit" id="save-info" class="btn-medium red">Save</button>
}
y
@model CustomerPasswordChangeModel
@using (Ajax.BeginForm("CustomerPasswordChange", "Customer", new AjaxOptions { HttpMethod = "Post", OnBegin = "InfoLoading", OnComplete = "InfoCompleted" }, new { id = "change", @class = "form-horizontal" }))
{
<input type="password" class="form-control" name="OldPassword" id="OldPassword" value="" />
<input type="password" class="form-control" name="NewPassword" id="NewPassword" value="" />
<button type="submit" id="save-change" class="btn-medium red" autocomplete="off">Save</button>
}
En su vista padre,
@Html.Partial("CustomerInfo", Model.CustomerInfo)
y
@Html.Partial("CustomerPasswordChange", Model.CustomerPasswordChange)
En Controlador:
[HttpPost]
public ActionResult CustomerInfo([Bind(Include = "Name,Email")] CustomerInfoModel model)
{
if (ModelState.IsValid)
return new Json(new { success=true, message="Updated.", errors=null);
// do you logic
return new Json(new { success=false, message="", errors=getHtmlContent(ModelState.Values.SelectMany(v => v.Errors).ToList(), "ModelError"));
}
[HttpPost]
public ActionResult CustomerPasswordChange([Bind(Include = "OldPassword,NewPassword")] CustomerPasswordChangeModel model)
{
if (ModelState.IsValid)
return new Json(new { success=true, message="Updated.", errors=null);
// do you logic
return new Json(new { success=false, message="", errors=getHtmlContent(ModelState.Values.SelectMany(v => v.Errors).ToList(), "ModelError"));
}
Esto hará lo que quiera hacer.
Nota: el método getHtmlContent genera un mensaje de error para mostrar en la página. Nada tan especial. Puedo compartirlo si es necesario.
Yay ... A pesar de que la pregunta seguramente no estaba clara, esto es exactamente lo que quería escuchar: "Si solo deseas actualizar/cambiar una de las secciones del formulario, entonces esto no se puede hacer sin usar". Hasta ahora, parece que no hay una forma clara de implementar los llamados widgets en asp.net mvc. :/ –
Esto no es una limitación de MVC; solicita actualizar solo parte de la página, por lo que debe hacer algo del lado del cliente (por ejemplo, AJAX/JS), ya que TODOS los formularios HTML cambian de página una vez enviados. –
Pregunta simplemente pulse la marca de insignia 'popular'. Sorprendentemente ver cuánto he aprendido. Una pregunta tan estúpida :RE –